var c = false;
if(c=[] && c.length==0)alert('hi');
hi没有被警告,因为当它执行&&的第二个操作数时c仍然是假的,有人可以解释如果执行条件中的布尔操作数以及按什么顺序执行?
答案 0 :(得分: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');
}
我在发布之前检查了规范 - 我有点惊讶的是,一个空数组被认为是真的,但它是......