javascript - (obj || {}) 与对象(obj)

标签 javascript

(1) 和 (2) 之间是否存在任何重要差异(语义、性能相关等)?

  1. var obj = obj || {};
  2. var obj = Object(obj);

上下文。第一个是我在 Django 的模板和我的 js 文件之间共享变量的方式。我刚刚看到 Rauschmayer 2014 中的一个部分(“用于转换 bool 值、数字、字符串和对象的函数”,第 79 页),他在其中描述了 Object(obj) 如下:

  • obj 如果obj 是一个对象,
  • {} 如果 objundefinednull
  • [wrapped primitive] 如果 obj 是原始值。

考虑到(非常非正式的)语义(特别是前两个子句),在我看来我们可以在我们使用 (1) 的任何地方使用 (2),但我不完全确定这会产生什么后果。

Rauschmayer, Axel (2014) Speaking JavaScript (免费在线阅读)。

最佳答案

是的,有区别,因为您给出的报价已经提到了。当 obj 是原语时,第一个符号将返回原语本身。第二个将返回一个包装原语,它是一个对象。

如果代码的其余部分依赖于 obj 是一个对象,则第二种表示法更具防御性。

但话又说回来,第一种表示法更常见,人们可能想知道如何将原始值分配给名为 obj 的变量。

关于javascript - (obj || {}) 与对象(obj),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31361219/

相关文章:

javascript - 计算段落相对于内容[数据]的高度(字符数)

javascript - 逗号放在哪里

javascript - 更改 Bootstrap 导航选项卡行换行

Javascript:使用动态参数从 onclick 事件调用对象函数/方法

javascript - 从 mongo 返回纯 json 对象的问题

javascript - 如何在浏览器中使用 Javascript 加密/解密任意二进制文件?

javascript - 使用 parseString() 时, Node xml2js 返回 'undefined'

javascript - 在不使用 jquery 的情况下单击外部 div 时隐藏 div

javascript - 从元素的子元素中删除特定的事件处理程序

javascript - 如何在不刷新页面的情况下获取URL的参数?