首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >javascript比较危机

javascript比较危机
EN

Stack Overflow用户
提问于 2012-10-06 04:32:33
回答 2查看 121关注 0票数 4

我遇到了以下问题,无法掌握原因,谁能解释一下?

代码语言:javascript
运行
复制
var foo = [0];
console.log(foo == !foo); // true 
console.log(foo == foo);  // true
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-06 04:35:18

第二个比较很容易解释:foo等于它自己。

然而,第一个有点棘手:foo是一个数组,它是一个对象,当为coerced to boolean时,它的计算结果为true。所以!foo就是false。但是,比较左侧的foo并没有转换为布尔值。在相等比较期间,这两个操作数实际上都被转换为数字。它是这样评估的:

代码语言:javascript
运行
复制
[0] == false
[0] == 0
"0" == 0
0 == 0
true

根据MDN,关于与相等运算符==的比较

如果两个操作数不是同一类型,JavaScript将转换这两个操作数,然后应用严格比较。如果操作数是数字或布尔值,则操作数将被转换为数字(如果可能

我知道这个解释听起来很肤浅。它实际上比这复杂得多,但基本步骤是我上面列出的步骤。您可以查看有关ECMA-262规范的详细信息,特别是在911.9部分。

票数 6
EN

Stack Overflow用户

发布于 2012-10-06 04:41:02

你应该使用"===“和"!==”而不是"==“和"!=”这里有更多解释:Which equals operator (== vs ===) should be used in JavaScript comparisons?

http://net.tutsplus.com/tutorials/javascript-ajax/the-10-javascript-mistakes-youre-making/

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12753646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档