2
var c = false;
if(c=[] && c.length==0)alert('hi');
喜JavaScript的顺序没有警觉,因为C仍然是假的,当它执行的& &第二个操作数,有人可以解释,如果执行条件,在什么样的顺序布尔操作数怎么样?执行
var c = false;
if(c=[] && c.length==0)alert('hi');
喜JavaScript的顺序没有警觉,因为C仍然是假的,当它执行的& &第二个操作数,有人可以解释,如果执行条件,在什么样的顺序布尔操作数怎么样?执行
我相信这只是一个优先问题 - &&
约束力比=
严格。
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');
}
我检查了规范发布之前 - 我有些诧异,一个空数组被认为是真实的,但它是...
警报仍然不会在你的第二个例子中运行,因为在Javascript中,一个空数组是一个类似假的值。 ('[] == false')是真的。 – Triptych 2010-01-19 06:35:19
三联:一个空的数组不被视为一个假类似的值,你的例子是等号运算符的一个* quirk *,尝试:'!! [] == true;','![] == false;', ''== == false;' – CMS 2010-01-19 06:46:49
好编辑Jon,BTW *所有*除了undefined,null,NaN,0空字符串(当然还有false) true“在一个布尔表达式中。 – CMS 2010-01-19 07:06:57