林学习的JavaScript,今天我发现这个代码:Javascript语句与|| {};
window.Picture2 = window.Picture2 || {};
我不明白|| {}; 有人可以为我解释这个吗? TKS这么多:)
林学习的JavaScript,今天我发现这个代码:Javascript语句与|| {};
window.Picture2 = window.Picture2 || {};
我不明白|| {}; 有人可以为我解释这个吗? TKS这么多:)
这是一个默认的值赋给一个全局变量Picture2
一种危险的方式。
window.Picture2 = window.Picture2 || {};
这将初始化window.Picture2
作为一个新的对象{}
如果没有定义它。 然而,因为这是truthyness检查,Picture2
也将被分配,如果有任何这些falsy values一个空对象:
// these are all falsy
0, NaN, null, '', undefined, false
这可能不适合所有这些情况下,期望的行为,特别是对0
,NaN
,false
或''
值。
没有为ECMAScript的6添加default operator这确实检查undefined
,没有别的建议:
window.Picture2 ??= {};
它将检查.Picture2
已被定义,如果它已使用该值,则将Window.Picture2
分配给新对象文字。
由于@Christoph状态 - Picture2
将被分配一个新的对象字面量,如果对象是falsy
。
准确地说:如果是falsy - 这包括'0',' “”','NaN','null'返回FALSE。 – Christoph 2013-04-22 09:38:51
@Christoph - 谢谢,编辑。 – 2013-04-22 09:49:25
如果window.Picture2
是未定义的(假在条件评估)它分配一个缺省为空对象window.Picture2
则OR(||
)被exectuted和window.Picture2
成为空对象。
+1这不是更好的检查'if(!window.Picture2){window.picture2 = {}}'?在两种情况下都需要进行比较,但可以跳过重新分配。事件虽然这段代码稍长一些,但它应该更快,并且对于一些人更具可读性。 – insertusernamehere 2013-04-22 09:47:32
@insertusername这个任务*可能会被内部优化掉,但尽管如此,尽管如此,如果仍然存在虚假值的缺陷,那么您的代码是朝着正确方向迈出的一步。 – Christoph 2013-04-22 09:49:48
@insertusername这里的保存选项是'if(typeof window.Picture2!= undefined){...}' - 非常详细,但可以将其放入一个'defined'函数或类似的东西。 – Christoph 2013-04-22 10:20:34