2010-11-15 46 views
1

今天看到了一些我從未見過的JS表示法,如果這是大家都知道的共同點,請耐心等待。Javascript定義變量表示法問題

var cookiepath = cookiepath || ''; 

現在,這只是說,如果一個名爲cookiepath變量已經存在,將其設置爲cookiepath或者如果它不,它設置爲「」?

+0

可能重複的[使用Javascript ||操作者(http://stackoverflow.com/questions/1378619/javascript-operator) – Guffa 2010-11-15 15:14:23

回答

2

cookiepath變量正在被聲明,初始化。

如果已經在當前詞法範圍中聲明瞭標識符,則var語句不會造成任何傷害。

如果cookiepath尚未聲明,var語句在運行時會將變量初始化爲undefined

之後,在運行時,在作出轉讓,如果它的值是falsy(除nullundefined,一個空字符串,0NaN,或false)將它設置爲空字符串。

請記住,您可以訪問本地範圍中的cookiepath變量。

請看下面的例子:

var cookiepath = 'outer'; 
(function() { 
    var cookiepath = cookiepath || ""; 
    alert(cookiepath); // alerts an empty string, not "outer" 
})(); 

在上面的例子,我們有一個全球性的cookiepath變量,在全球範圍內,但在執行功能時,本地cookiepath變量將在範圍內聲明的功能,而這個陰影外範圍的價值,而這種行爲是明顯的,甚至在功能上var語句之前,例如:

var foo = 'foo'; 
(function() { 
    alert(foo); // undefined, not 'foo' from the outer scope 
    var foo; // undefined 
})(); 
2

你是對的。

||運算符評估爲它的第一個「truthy」操作數。
如果第一個操作數是「truthy」,則第二個操作數根本不會被評估。
(如果沒有操作數是truthy,它計算到第二個)

Truthy意味着什麼,但undefinednullfalse0NaN,或""

0

爲@SLaks說,它的計算結果爲第一個真正所以這段代碼將導致錯誤的執行:

var cookiepath = false; 
var cookiepath = cookiepath || ""; 
# cookiepath === "" 
0

這是一種方法來提供一個默認值。

這裏,cookiepath將只得到分配值',如果它的價值是nullfalseundefined0,空字符串,或NaN。否則,它將保持不變。