2015-04-05 98 views
0

这是什么意思?var w = q || q2;这个表达意味着什么?

var q = []; 
var q2 = ["canada","usa","mexico"]; 
var w = q||q2; 
document.writeln(w); 

变量w的值是:[]空列表。

有人可以向我解释为什么它显示这个[]而不是[“加拿大”,“美国”,“墨西哥”]。

+1

因为'[]'是一个被认为是真值的数组对象。 'q.length? q:q2;' – undefined 2015-04-05 23:22:09

+0

不为空; falsy。但'q'是真的,所以'q || q2'将评估为'q' – elclanrs 2015-04-05 23:22:11

回答

1

您应该从MDN读取Logical Operators。根据文档

逻辑算子OR(||expr1 || expr2

返回expr1如果它可以被以其它方式转化成true;,返回 expr2。因此,当与布尔值一起使用时,||如果 操作数为true,则返回true;如果两者都是假的,则返回false。

简而言之,逻辑运算符从左到右进行评估。在你的情况下,由于你已经声明q是一个空的数组([]),它的计算结果为真,并立即开始并将w分配给该数组。

如果你想q2占先,你可以简单地做

var w = q2 || q; 

所以只有当q2计算结果为falsey将其分配wq代替这种方式。另一种选择是根本不宣布q或声明它有点虚伪。你可以找出什么评估falsehere

相关问题