2012-03-27 52 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