2013-04-22 90 views
10

林学习的JavaScript,今天我发现这个代码:Javascript语句与|| {};

window.Picture2 = window.Picture2 || {}; 

我不明白|| {}; 有人可以为我解释这个吗? TKS这么多:)

回答

7

这是一个默认的值赋给一个全局变量Picture2一种危险的方式。

window.Picture2 = window.Picture2 || {}; 

这将初始化window.Picture2作为一个新的对象{}如果没有定义它。 然而,因为这是truthyness检查,Picture2也将被分配,如果有任何这些falsy values一个空对象:

// these are all falsy 
0, NaN, null, '', undefined, false 

这可能不适合所有这些情况下,期望的行为,特别是对0NaN,false''值。

没有为ECMAScript的6添加default operator这确实检查undefined,没有别的建议:

window.Picture2 ??= {}; 
+0

+1这不是更好的检查'if(!window.Picture2){window.picture2 = {}}'?在两种情况下都需要进行比较,但可以跳过重新分配。事件虽然这段代码稍长一些,但它应该更快,并且对于一些人更具可读性。 – insertusernamehere 2013-04-22 09:47:32

+1

@insertusername这个任务*可能会被内部优化掉,但尽管如此,尽管如此,如果仍然存在虚假值的缺陷,那么您的代码是朝着正确方向迈出的一步。 – Christoph 2013-04-22 09:49:48

+0

@insertusername这里的保存选项是'if(typeof window.Picture2!= undefined){...}' - 非常详细,但可以将其放入一个'defined'函数或类似的东西。 – Christoph 2013-04-22 10:20:34

1

它读作:

如果window.Picture2未定义空对象分配给 window.Picture2

+2

这不是JSON。 – 2013-04-22 09:36:25

+2

空的json?那是什么? – Christoph 2013-04-22 09:36:36

+0

@GeraldSchneider对不起我的坏。 – loxxy 2013-04-22 09:37:10

4

它将检查.Picture2已被定义,如果它已使用该值,则将Window.Picture2分配给新对象文字。

由于@Christoph状态 - Picture2将被分配一个新的对象字面量,如果对象是falsy

http://www.sitepoint.com/javascript-truthy-falsy/

+1

准确地说:如果是falsy - 这包括'0',' “”','NaN','null'返回FALSE。 – Christoph 2013-04-22 09:38:51

+0

@Christoph - 谢谢,编辑。 – 2013-04-22 09:49:25

6

如果window.Picture2未定义(falsy

+0

可悲的是,不仅是在'undefined' ... – Christoph 2013-04-22 09:45:23

+0

@Christoph这就是为什么在'()'我说'falsy' – 2013-04-22 09:46:37

+0

这是真的,但它的使用这种技术(见我的回答)时需要注意的最重要的一点! – Christoph 2013-04-22 09:47:37

1

如果window.Picture2是未定义的(假在条件评估)它分配一个缺省为空对象window.Picture2则OR(||)被exectuted和window.Picture2成为空对象。