js中== 和 != 的转换规则
js中== 和 != 的转换规则
1.如果有一个操作数是布尔型,在比较相等性之前先转换数值 false–0 true–1
2.如果有一个操作数是字符串,另一个为数值,在比较相等性之前先将字符串转换数值 不为数值NaN
3.如果有一个数为对象,另一个不是,则先调用对象的valueOf()方法,得到基本数据类型值按照之前规则比较
这两个操作符在进行比较时要遵循以下规则
1.null == undefined
2.比较相等性之前不能将null 和 undefined 转换成其他任何值
3.NaN 不等于任何值 NaN不等于NaN
4.如果两个数都是对象 则比较是不是指向同一个对象
console.log([] == []);//false console.log([] == ![]);//true console.log([] === ![]);//false console.log({} == {});//false console.log({} == !{});//false console.log({} === !{});//false console.log(null == undefined);//true
如果复杂数据类型和简单数据类型进行运算, 先调用复杂数据类型的valueof方法, 如果调用了valueof方还无法进行运算,
那么就调用复杂数据类型的toString方法
这里用数组和对象举例
console.log([] == ![]); // true // ![] == false console.log([].valueOf());// [] console.log([].toString());// 空 '' console.log(typeof [].toString()); //string // '' == false // 0 == 0 // true console.log({} == !{}); // false //!{} == false console.log({}.valueOf());//{} console.log({}.toString());//"[object Object]" // "[object Object]" == false // NaN == 0 // false