2012-03-27 49 views
4

我刚开始阅读一些JavaScript项目。大部分的js文件的开始与有一个对象声明如下:或JavaScript对象声明的符号

window.Example || { 
bleh: "123"; 
blah: "ref" 
} 

什么是||符号在这里做?

+3

这不是有效的JavaScript。但是在SO上这已经被问过一千次了。 – 2012-03-27 18:06:30

+0

使用这种技术时要小心,如果你的'window.Example'属性可以是0,空字符串,假等。 – jbabey 2012-03-27 18:12:50

回答

6

Javascript中的对象是真实的,因此如果window.Example是虚假(或未定义),则表达式计算结果为window.Example或默认对象。例如:

var x = window.Example || {foo: 'bar'}; 
// x = {foo: 'bar'}, since window.Example is undefined 

window.Example = {test: 1}; 

var y = window.Example || {foo: 'bar'}; 
// y = {test: 1}, since window.Example is truthy (all objects are truthy) 

读​​对truthy/falsy和短路评价一个很好的解释。

+0

我认为链接被破坏。 – user1240679 2012-03-27 18:22:23

+0

@ user1240679谢谢你让我知道!它需要一个尾随正斜杠哈哈。我修好了它。 – Paulpro 2012-03-27 18:32:21

2

有从代码中缺少一个重要的一点 - 变量声明:

var something = window.Example || { 
    bleh: "123", 
    blah: "ref" 
} 

这大致翻译为“设置somethingwindow.Example,除非它不存在,然后将其设置到这个新的对象”。

3

JavaScript中的||运算符是其他类似C语言中的“或”运算符,但它明显不同。它的意思是:

  1. 评估左边的子表达式。
  2. 如果该值,当强制转换为布尔型,是true,则该子表达式的值(之前胁迫布尔值)是||表达
  3. 否则评价右手子表达式和屈服其值作为值||表达式的值。

因此它的使用惯用初始化一些可能已经被初始化:

var something = window.something || defaultValue; 

只是手段,“请检查‘东西’是一个truthy值window对象的属性,以及如果不是,则将其设置为defaultValue。“

+0

@MikeSamuel感谢您解决我的错别字:-) – Pointy 2012-03-27 18:12:39