(1) 和 (2) 之间是否存在任何重要差异(语义、性能相关等)?
var obj = obj || {};
var obj = Object(obj);
上下文。第一个是我在 Django 的模板和我的 js 文件之间共享变量的方式。我刚刚看到 Rauschmayer 2014 中的一个部分(“用于转换 bool 值、数字、字符串和对象的函数”,第 79 页),他在其中描述了 Object(obj)
如下:
obj
如果obj
是一个对象,{}
如果obj
是undefined
或null
,- [wrapped primitive] 如果
obj
是原始值。
考虑到(非常非正式的)语义(特别是前两个子句),在我看来我们可以在我们使用 (1) 的任何地方使用 (2),但我不完全确定这会产生什么后果。
Rauschmayer, Axel (2014) Speaking JavaScript (免费在线阅读)。
最佳答案
是的,有区别,因为您给出的报价已经提到了。当 obj
是原语时,第一个符号将返回原语本身。第二个将返回一个包装原语,它是一个对象。
如果代码的其余部分依赖于 obj
是一个对象,则第二种表示法更具防御性。
但话又说回来,第一种表示法更常见,人们可能想知道如何将原始值分配给名为 obj
的变量。
关于javascript - (obj || {}) 与对象(obj),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31361219/