【发布时间】:2013-04-22 09:34:12
【问题描述】:
我正在学习 javascript,今天我发现了这段代码:
window.Picture2 = window.Picture2 || {};
我不明白 || {} ; 有人可以为我解释一下吗?太感谢了:)
【问题讨论】:
标签: javascript
我正在学习 javascript,今天我发现了这段代码:
window.Picture2 = window.Picture2 || {};
我不明白 || {} ; 有人可以为我解释一下吗?太感谢了:)
【问题讨论】:
标签: javascript
这是为全局变量Picture2 分配默认值的危险方法。
window.Picture2 = window.Picture2 || {};
这会将window.Picture2 初始化为新对象{}(如果未定义)。 然而因为这是对真实性的检查,如果Picture2 有以下falsy values 中的任何一个,它也会被分配一个空对象:
// these are all falsy
0, NaN, null, '', undefined, false
这可能不是所有这些情况的期望行为,尤其是对于 0、NaN、false 或 '' 值。
编辑?? "NULLISH COALESCING" 运算符现在是 ECMAScript 标准的一部分,并且已经具有 pretty decent browser support。
所以你的用例的语法是:
window.Picture2 ?? {};
如果Picture2 等于undefined 或null,这将评估为假,但对于其余的假值则不然。
如果要为函数参数分配默认值,现在还可以编写以下代码:
function myfunc(Picture2 = {}){
/* function body */
}
默认参数语法和空值合并运算符都是唯一正确的方法来分配默认值而不会产生副作用。
【讨论】:
if (!window.Picture2) { window.picture2 = {} }不是更好吗?在这两种情况下都需要进行比较,但可以跳过重新分配。事件虽然这段代码稍长,但它应该更快,并且对于某些人来说更具可读性。
if(typeof window.Picture2 != undefined){...} - 非常冗长,但可以将其放入defined 函数或类似函数中。
undefined 在 ES5 之前没有写保护。
如果window.Picture2 未定义,它会为window.Picture2 分配一个默认的空对象(falsy)
【讨论】:
undefined...
() 我说falsy
它将检查 .Picture2 是否已定义,如果它使用了该值,则将 Window.Picture2 分配给新的对象字面量。
正如@Christoph 所说 - 如果对象是 falsy,Picture2 将被分配一个新的对象字面量。
【讨论】:
0、""、NaN、null 和 false。
读作:
如果 window.Picture2 是 undefined 或 null 将空对象分配给 window.Picture2
【讨论】:
如果 window.Picture2 未定义(在条件评估中为 false),则执行 OR (||) 并且 window.Picture2 变为空对象。
【讨论】: