2010-11-15 28 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。否则,它将保持不变。