js==引起的隐式转换

js的双等号类型转换

var undefined;
undefined == null; // true
1 == true; // true
2 == true; // false
0 == false; // true
0 == ' '; // true
NaN == NaN; // false
[] == false; // true
[] == ![]; // true

// alert(!![]) //true
// alert(![]) //false
// alert([] == 0) //true
// alert(false == 0) //true

分析:undefined与null相等 但不全等(===)
当为number与string时,会将string转换为number;
number和boolean时,会将boolean转换为number
number或string与Object,会将Object转换成number或string

总之就是:

一、首先看双等号前后有没有NaN,如果存在NaN,一律返回false。

二、再看双等号前后有没有布尔,有布尔就将布尔转换为数字。(false是0,true是1)

三、接着看双等号前后有没有字符串, 有三种情况:

1、对方是对象,对象使用toString()或者valueOf()进行转换;

2、对方是数字,字符串转数字;(前面已经举例)

3、对方是字符串,直接比较;

4、其他返回false

四、如果是数字,对方是对象,对象取valueOf()或者toString()进行比较, 其他一律返回false

五、null, undefined不会进行类型转换, 但它们俩相等


var a;
console.dir(0 == false);//true

console.dir(1 == true);//true


console.dir(2 == {valueOf: function(){return 2}});//true


console.dir(a == NaN);//false
console.dir(NaN == NaN);//false

 console.dir(8 == undefined);//false

console.dir(1 == undefined);//false

 console.dir(2 == {toString: function(){return 2}});//true

 console.dir(undefined == null);//true

 console.dir(null == 1);//false

  console.dir({ toString:function(){ return 1 } , valueOf:function(){ return [] }} == 1);//true

  console.dir(1=="1");//true
  console.dir(1==="1");//false

(附:js中的数据类型转换?)
函数转换:parseInt()、parseFloat()、toString()
强类型转换:Boolean()、Number()、String()
弱类型转换:“==”、“-”、“+”、if()

(拓展:for循环中的效率问题?)
1.for(var i=0;i<arr.length;i++)

2.for(var i in arr)

3.for(var i=0,len=arr.length;i<len;i++)

第三种效率更高!
在大数据下:
第三种方式比第一种执行速度快3~4倍;
至于第三种比第三种快100多倍开外

猜你喜欢

转载自blog.csdn.net/qq_37016928/article/details/79882179