年后第一天开工,在刷面试题的时候看到了这么一道题,null == 0居然是false,之前的常识不是,null、undefined、0、-0、NaN、‘' 这几个值会遇到==操作符会转换成false吗, 然后百度了一下了解了null在==比较不进行类型转换,然后在控制台随便尝试的时候发现null == undefined居然是true,不是不转换吗,这这这真是毁三观啊,在我百思不得其解的时候我翻开了那本神奇的红皮书,泽拉斯大神竟然早就把这些写在书里了,试问我也是看过几遍的人,但是每次都会把前三章选择性的直接忽略,以后真的要戒骄戒躁踏踏实实的学好基础知识啊,下面我就详细的分析一下这两个操作符的使用规则:
1.如果等号两边有布尔值,先将布尔值转成数字(true转成1,false转成0),在进行比较。
例:false == 0;会将false先转换为数字0,再与0作比较
true == 1;会将true先转换为数字1,再与1作比较
因此 false == 1;//false true==10;//false
2.如果一个是字符串一个是数值,现将字符串转成数值在进行比较。
例:1=='1';//true
2=='2';//true
1=='2';//false
''==0;//true 这里需要注意的是空字符串会直接转成数字0
//结合第一条和第二条就能得出:false =='0'//true
3.如果有对象,先调用对象的valueof()方法,再作为基本类型进行比较。
4.null和undefined是相等的。undefined==null //这一条就是我上面所困惑的问题
5.如果比较双方有null和undefined,不能将其转换为其他值。
这条也就表明除了他们俩自身相比较,其他的任何值与undefined,null做==比较返回值都是false,比如:
null == false//false undefined == 0//false
6.如果有NaN,相等操作符返回false,不相等操作符返回true,如果两个值都为NaN,返回false,也就是说NaN不等于本身。
7.如果两个操作数都为对象,比较的是他们是否指向同一个对象。对象比较的是他们的引用而不是值。