js中==和===的区别 误区纠正
js中和=的区别你真的懂吗
应该有很多的开发者都会和我这样认为,和=的区别无非就是只是比较值,而=是比较值和类型,然而这真的是这么简单一回事吗?
今天偶然浏览到一篇博客讲明了和=的真正区别,收益匪浅,所以分享下,
上面的理解是错的,[]false和[1]=[1]返回就可以推翻。[]==false,他们的值并不相等,但是返回true。[1]和[1],值相等,类型也相等,返回为false。因此上面理解是错的。
正确的理解是:
==是相等,先转换再比较,返回true。
===是全等,不转换就比较,返回true。
看下最简单的例子:
①基础类型vs基础类型
1== true //true
1 === true //false
再看两个复杂的例子:
②对象vs基础类型*
[] == false //true
[] === false //false
③对象vs对象
{age:6} == {age:6} //false
{age:6} === {age:6} //false
[1] == [1] //false
[1] === [1] //false
来看下《Javascript高级程序设计》关于和=的规则
1.如果有一个操作数是布尔值,则在比较前先将其转换为数值,true转换为1,false转换为0,例如false == 0,true == 1
2.如果一个操作数是字符串,另一个操作数是数值,先将字符串转换成数值,例如"1"==1,’’ ==0
3.如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型按照前面的规则进行比较。(解释不清楚)
4.null和undefined是相等的。
5.如果有一个数是NaN,则相等操作符返回false,而不想等操作符返回true。NaN == NaN返回为false,因为规则如此。
6.如果两个操作数是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回true,否则返回false。
顺便贴下原博主的链接https://segmentfault.com/a/1190000011658459 里面有讲明详细的转换规则