我正在使用短路评估来设置对象中的键。例如:
var obj = {foo : 'bar'}
var obj2 = {}
obj2.somekey = obj.baz || obj.foo //will assign 'bar' to obj2.somekey
与上面代码的唯一区别是,如果 obj.baz 不存在,我不分配 obj.foo,而是希望 obj.somekey 保持未定义。我试过obj2.somekey = obj.baz ||
,但这给我带来了语法错误。
请注意null
和undefined
,如this question表明,实际上也不是未定义的。
那么有什么方法可以使用短路语法来做到这一点吗?
最佳答案
看起来最简单的解决方案是:
obj2.somekey = obj.baz;
但是如果你真的想要 logical operator 的语义(即空字符串、null
、0
、NaN
和 false
,全部计算结果为 false
,因此 ||
返回右侧的任何内容),使用 void
:
obj2.somekey = obj.baz || void(0);
请注意,在这种情况下,将分配属性.somekey
,但分配给它的值可能是未定义
。请参阅Felix Kling's excellent answer以获得完整的解释。要使属性 .somekey
本身未定义,只需使用:
if ('baz' in obj) obj2.somekey = obj.baz;
或者即使 .baz
为 false,也要保留 .somekey
未定义,请使用:
if (obj.baz) obj2.somekey = obj.baz;
关于javascript - 短路评估未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21692572/