声明对象的两个语句之间的区别

Difference between two statements that declare an object

这个说法有什么区别

var X = X || {};

还有这个。他们做同样的事情?有性能差异吗?

var X = typeof X === "undefined" ? {} : X;

在这种情况下:var X = X || {} 如果 X 变量已被声明但为 falsy,则该变量将被重新定义。所以 var X = 0; X = X || {}; 会用对象覆盖 0

它们不一样。

X任何可能时return对象

falsy值。
typeof 检查将 return {} 如果 Xundefined.

根据 this testundefined 检查速度几乎快了一倍。这可能是因为不需要类型转换。