Javascript 中 == 和 === 区别是什么?

这个问题的答案网上随处可见,总结下答案无外乎就是: 双等号会造成类型转换,推荐一律使用三等号寻寻觅觅一直没有遇到能说服我放弃双等号的答案,还请大家赐教 我的理解:在变量赋值时内存会存储值的类型;做双等号比较操作时,会先做临时类型转换再做比较,内存中存储的值还是原来的不会改变: 不知道我理解是否有误,请赐教 ----------------------------------------------------------------------- 感谢回答,我问题没描…
关注者
401
被浏览
47345

28 个回答

谁告诉你 == 不会有副作用的
var x = 1;
var obj = {valueOf: function(){ x = 2; return 0 }}
console.log(obj == 0, x) // true, 2
甚至还会产生异常呢
var x = 1;
var obj = {valueOf: function(){ return {} }, toString: function(){ return {}}}
console.log(obj == 0) // Error: Cannot convert object to primitive value

————————————————————————————————————————————
这是 ==这是 ===完整比较图:
  • 红色:===
  • 橙色:==
  • 黄色:<= 和 >= 同时成立,== 不成立
  • 蓝色:只有 >=
  • 绿色:只有 <=
(参:JS Comparison Table, Edit fiddle - JSFiddle)

顺便,有人说这图像现代艺术,感觉旋转完更像,删减重排换成 S1 配色之后做成头像了。
不免费帮人做头像(也就是换个顺序的事情)
JavaScript 中应该用 "==" 还是 "==="? - 贺师俊的回答

对后续代码会不会造成意外的影响”?答案是:会。

意外的影响不是指程序执行上的“副作用”,而是指代码意图的实现。


@邹润阳 提到的 You don't know JS 是本好书,但是不代表作者的所有观点都是对的。

如果对你来说编程是一项工作,而不仅仅是兴趣爱好,就需要用工程标准进行衡量。而以工程标准衡量,“==”带来的便利性抵不上其带来的成本。

举个简单的例子,团队协作中你肯定需要读别人的代码。而当你看到“==”时,要判断清楚作者的代码意图是确实需要转型,还是无所谓要不要转型只是随手写了,还是不应该转型但是写错了……所花费的脑力和时间比明确的“===”(加上可能需要的明确转型)要多得多。要记得团队中的每个人(包括原作者自己)都需要付出这理解和维护成本。
为什么?