空数组是真的,但它们也等于false.
var arr = [];
console.log('Array:', arr);
if (arr) console.log("It's true!");
if (arr == false) console.log("It's false!");
if (arr && arr == false) console.log("...what??");
Run Code Online (Sandbox Code Playgroud)
我想这是由于等于运算符操作的隐式转换.
任何人都可以解释幕后发生的事情吗?
我正在学习JavaScript,在浏览jQuery库时,我看到:
(冒号)被大量使用.这在JavaScript中用于什么?
// Return an array of filtered elements (r)
// and the modified expression string (t)
return { r: r, t: t };
Run Code Online (Sandbox Code Playgroud) 在我的空闲时间,我只是在玩js控制台,我遇到了一个意想不到的错误:
js> [] == {}
false
js> {} == []
typein:5: SyntaxError: syntax error:
Run Code Online (Sandbox Code Playgroud)
我尝试过===
:
js> [] === {}
false
js> {} === []
typein:9: SyntaxError: syntax error:
Run Code Online (Sandbox Code Playgroud)
我在这里想错了吗?
我用Firefox,Chrome和jscore测试了这个.
我可以将{}与true或false或本身进行比较,但是与null或undefined的比较会产生语法错误.这是因为{}是一个对象值而不是一个引用?感觉很奇怪它会是一个语法错误而不是某种运行时类型错误,或者只是工作.
为了澄清,我很好奇为什么这是一个SyntaxError,大多数情况下做的{} == {}
不仅仅是SyntaxError,而且根本没有错误.
以下是浏览器控制台(包括firefox和chrome)的结果,
false == {}
可以正常工作,但是{} == false
会出现语法错误.
>> false == []
true
>> false == {}
false
>> 0 == false
true
>> false == []
true
>> false == {}
false
>> [] == false
true
>> {} == false
Uncaught SyntaxError: Unexpected token ==
Run Code Online (Sandbox Code Playgroud)