javascript - 短路评估未定义?

标签 javascript

我正在使用短路评估来设置对象中的键。例如:

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 || ,但这给我带来了语法错误。

请注意nullundefined ,如this question表明,实际上也不是未定义的。

那么有什么方法可以使用短路语法来做到这一点吗?

最佳答案

看起来最简单的解决方案是:

obj2.somekey = obj.baz;

但是如果你真的想要 logical operator 的语义(即空字符串、null0NaNfalse,全部计算结果为 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/

相关文章:

javascript - knockout 模板。传递简单数据

javascript - Bootbox 输入失去对 alt 键的关注

javascript - "this"在嵌套的异步模块函数中如何正常运行?

javascript - 将硬编码的 JQuery 转换为插件 - 语法问题

javascript - 如何在 GET url 查询字符串中传递 Json 对象

javascript - 在 JavaScript 中是否有更简单的编写方法?

javascript - 检测浏览器当前 "media"模式

javascript - jQuery/Javascript 检查鼠标是在窗口内还是窗口外

javascript - 如何将ajax响应值传递到另一个页面?

javascript - Firefox 扩展 : Access to main document from sidebar