I was wondering for a longer time what the below means:
var a = a || { b : 1 }
if 'a' had any properties assigned before... they dissapear. So what is a purpose of the above syntax ?
I was wondering for a longer time what the below means:
var a = a || { b : 1 }
if 'a' had any properties assigned before... they dissapear. So what is a purpose of the above syntax ?
我喜欢这种语法。在我看来,它非常优雅。
解释很简单。您在这里拥有的是使用||
(或)运算符的条件表达式。这将根据条件的结果为变量赋值。
在这种情况下,条件是a || { b : 1 }
,所以如果变量a
已经被定义(即不等于假值),那么变量a
将保持不变。但是,如果a
尚未定义,则将为其分配对象字面量的值{ b : 1 }
。
这种语法方法通常用于定义默认值。
例如:
function say_hello( name ){
var the_name = name || 'Dude';
alert( "Hello, " + the_name );
}
say_hello( "Lix" ); // OUTPUTS: Hello, Lix
say_hello(); // OUTPUTS: Hello, Dude
如果参数name
尚未传递给函数,则将Dude
使用默认名称。
if a
is falsy即 (false, 0, undefined, null, "", NaN) 为其分配默认{ b : 1 }
值
代码将对象分配{ b: 1 }
给a
如果a
未定义。
a || { b: 1 }
表示a
或{ b: 1 }
,||
运算符返回第一个为真的操作数。因此,如果a
已定义,它将返回a
,否则将返回{ b: 1 }
(因为这是真的)。
如果a
已经分配了一些值,那么它将采用该值,否则它将分配对象{b:1}
到a
.