在ES2015中有没有一种方法可以直接访问对象属性而无需检查未定义?

时间:2016-06-17 01:23:55

标签: javascript ecmascript-6

在ES5中,每当我想获得某些属性时,我需要首先检查它是否存在如下:

if (typeof floob.flib !== 'undefined') {
    // do something
}

更糟糕的是,对于嵌套属性,您必须手动检查虚线路径中是否存在每个属性。

在ES2015中有更好的方法吗?

3 个答案:

答案 0 :(得分:2)

  1. 如果它只是一个深度属性名称 - 您不需要typeof,则可以将该值与undefined进行比较。

  2. 您的解决方案容易出现漏报:它可能认为没有具有给定名称的属性,而有一个属性。示例:var o = { foo: undefined };

  3. 如果你需要检查嵌套对象中是否存在路径 - 你仍然需要实现递归/循环/或使用任何为你做的库。

  4. 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例外,否则上述代码应该可以正常使用。