创建数组并将其推入一行

新手上路,请多包涵

以下只是一个理论上的 JavaScript 问题。我很好奇以下内容是否可以转换为单个语句:

 if(!window.foo){
  window.foo = [];
}
window.foo.push('bar');

这段代码大家应该都写过,但是能不能一行完成呢?

起初我认为这样的事情会起作用:

 (window.foo || window.foo = []).push('bar');

但这不起作用,因为分配无效。接下来我尝试在推送时链接一些东西,但这不起作用,因为推送不返回数组。

关于这是否可以用纯 JavaScript 完成的任何想法?

(结果应该是 window.foo = ['bar']

原文由 mkoryak 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 413
2 个回答

你的作业倒退了*。它应该是:

 (window.foo = window.foo || []).push('bar');

JavaScript 中的 || 运算符 _不返回布尔值_。如果左侧为真,则返回左侧,否则返回右侧。

 a = a || [];

相当于

a = a ? a : [];

所以上面的另一种写法是:

 (window.foo = window.foo ? window.foo : []).push('bar');

\* 详情见评论

原文由 zzzzBov 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您添加括号,您的代码就可以正常工作,以便它按照您的预期进行:

 (window.foo || (window.foo = [])).push('bar');

没有括号,它认为它应该首先评估 window.foo || window.foo ,然后将数组分配给它的结果,这是不可能的。

原文由 Guffa 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏