在ES5中,每当我想获得某些属性时,我需要首先检查它是否存在如下:
if (typeof floob.flib !== 'undefined') {
// do something
}
更糟糕的是,对于嵌套属性,您必须手动检查虚线路径中是否存在每个属性。
在ES2015中有更好的方法吗?
答案 0 :(得分:2)
如果它只是一个深度属性名称 - 您不需要typeof
,则可以将该值与undefined
进行比较。
您的解决方案容易出现漏报:它可能认为没有具有给定名称的属性,而有一个属性。示例:var o = { foo: undefined };
如果你需要检查嵌套对象中是否存在路径 - 你仍然需要实现递归/循环/或使用任何为你做的库。
ES2015没有带来任何新的东西来解决这个问题。
答案 1 :(得分:2)
如果您有lodash
可用,则可以使用_.get(obj, path, defaultValue)
(https://lodash.com/docs#get)
答案 2 :(得分:-1)
使用typeof
,
typeof floob.flib === 'undefined'
等于,
floob.flib === undefined
我假设你要检查floob.flib
是否有值,如果有,你想用它来执行操作。
但是,在JS中,实现这一目标的方法几乎更为简单。
<强> E.g。强>
if (floob.flib) {
// 'floob.flib' is NOT 'null', 'empty string', '0', false or 'undefined'
}
如果您想使用三元(?:
)运算符赋值变量,这也很有效。
var str = floob.flib ? 'exists' : 'does not exist';
甚至使用逻辑OR(||
)
var str = floob.flib || '<= either null, empty, false, 0 or undefined';
请注意,除非floob.flib
不会产生ReferenceError
例外,否则上述代码应该可以正常使用。