执行

2010-01-19 19 views
2
var c = false; 
if(c=[] && c.length==0)alert('hi'); 

喜JavaScript的顺序没有警觉,因为C仍然是假的,当它执行的& &第二个操作数,有人可以解释,如果执行条件,在什么样的顺序布尔操作数怎么样?执行

回答

3

我相信这只是一个优先问题 - &&约束力比=严格。

if (c = ([] && c.length == 0)) 
{ 
    alert('hi'); 
} 

所以它的分配c价值false,而不是空数组:你的代码是等价的。

试试这个:

if ((c = []) && c.length == 0) 
{ 
    alert('hi'); 
} 

编辑:为了解决Tryptich的评论 - 我没有张贴:)至于CMS说,一个空数组被认为是真正的前试试这个。试试这个:

if (c = []) 
{ 
    alert('empty array is true'); 
} 

甚至只是这样的:

if ([]) 
{ 
    alert('empty array is true'); 
} 

我检查了规范发布之前 - 我有些诧异,一个空数组被认为是真实的,但它是...

+1

警报仍然不会在你的第二个例子中运行,因为在Javascript中,一个空数组是一个类似假的值。 ('[] == false')是真的。 – Triptych 2010-01-19 06:35:19

+1

三联:一个空的数组不被视为一个假类似的值,你的例子是等号运算符的一个* quirk *,尝试:'!! [] == true;','![] == false;', ''== == false;' – CMS 2010-01-19 06:46:49

+0

好编辑Jon,BTW *所有*除了undefined,null,NaN,0空字符串(当然还有false) true“在一个布尔表达式中。 – CMS 2010-01-19 07:06:57