我正在尝试测试对象属性的真实性。它是否存在且具有值使用该值,如果不存在则将默认值添加到另一个对象。
$capsule->addConnection([
'driver' => 'mysql',
'host' => env('Database_Host'),
'database' => env('Database_Name'),
'username' => env('Database_Username'),
'password' => env('Database_Password'),
'charset' => 'utf8',
'collation' => 'utf8_persian_ci',
'prefix' => '',
]);
$capsule->setFetchMode(PDO::FETCH_ASSOC);
// $capsule->getConnection()->getPdo()->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
// $capsule->setAsGlobal();
return $capsule->getConnection();
我在这里遇到错误。我认为它将返回undefined,因此将obj.eth0.server.address设置为false值“10.0.0.1”。
const initNetwork = ( setupObj ) => {
let obj = {};
obj = Object.assign({}, setupObj);
obj.eth0 = obj.eth0 ? obj.eth0 : {};
obj.wlan0 = obj.wlan0 ? obj.wlan0 : {};
obj.eth0.server = obj.eth0.server ? obj.eth0.server : {};
obj.wlan0.client = obj.wlan0.client ? obj.wlan0.client : {};
obj.wlan0.server = obj.wlan0.server? obj.wlan0.server : {};
obj.eth0.mac = null;
obj.wlan0.mac = null;
obj.eth0.server.address = setupObj.eth0.server.address ? setupObj.eth0.server.address : "10.0.0.1";
}
initNetwork(); // intentionally leaving this empty to test setting default values.
查看此键/值对是否一直存在于树中的最佳方法是什么?如果是,请使用该值,否则设置false值?
答案 0 :(得分:3)
您正在分配名为obj
的新对象,因此您的支票应该针对obj
。
在这种情况下,setupObj
始终为undefined
您可以使用setupObj
运算符为&&
添加其他条件:
obj.eth0.server.address = (setupObj && setupObj.eth0.server.address) ? setupObj.eth0.server.address : "10.0.0.1";
当然建议检查每个级别的嵌套对象。
运行示例:
const initNetwork = ( setupObj ) => {
let obj = {};
obj = Object.assign({}, setupObj);
obj.eth0 = obj.eth0 ? obj.eth0 : {};
obj.wlan0 = obj.wlan0 ? obj.wlan0 : {};
obj.eth0.server = obj.eth0.server ? obj.eth0.server : {};
obj.wlan0.client = obj.wlan0.client ? obj.wlan0.client : {};
obj.wlan0.server = obj.wlan0.server? obj.wlan0.server : {};
obj.eth0.mac = null;
obj.wlan0.mac = null;
obj.eth0.server.address = (setupObj && setupObj.eth0.server.address) ? setupObj.eth0.server.address : "10.0.0.1";
}
initNetwork(); // intentionally leaving this empty to test setting default values.

答案 1 :(得分:0)
您可以测试是否存在对象,但是您无法测试是否存在不存在的对象的属性,以及{{1}时您的代码尝试执行的操作}没有传入函数。
在尝试使用该参数之前,您需要测试函数以查看是否传入了参数。并且,鉴于您的代码中有两个位置需要执行此测试,因此更有意义的是不使用三元组而是使用传统的setupObj
。
该函数应如下所示(您实际上可以运行此代码以查看它的运行情况):
if

答案 2 :(得分:0)
也许try / catch块可以帮助你摆脱一些额外的代码:
try {
obj.eth0.server.address = setupObj.eth0.server.address;
} catch (e) {
if (e instanceof TypeError) {
obj.eth0.server.address = '10.0.0.1';
} else {
throw e;
}
}