js中的隐式转换

120 阅读1分钟

什么时隐式转换

由于js是弱类型语言,所以在进行四则运算和比较时,js将不能进行比较的类型转换为统一的类型进行比较和计算。

隐式转换的原则

对象与布尔进行数据比较

var obj =[];
var bool = false;
console.log(obj == bool);//true

var obj =[];
var bool = true;
console.log(obj == bool);//false

如上图所示,数组和布尔类型本无法比较,就是因为进行了隐式转换。当一个对象与一个数组进行比较时,他先将对象通过toString()转为字符串,再将字符串通过Number转为数字,而布尔类型则是通过Number()直接转为数字,进而比较数字是否相等。 步骤如下:

  • 对象Number(obj.toString())
  • 布尔Number(bool)
  • Number(obj.toString())与Number(bool)进行比较

对象与字符串进行比较

var obj = ['a','b','c'];
var str = 'a,b,c'
console.log(obj == str);//true

对象与字符串进行比较,直接将数组转化为字符串进行比较 步骤如下:

  • 对象obj.toString()
  • obj.toString()与str进行比较

对象和数字

步骤如下:

  • 对象Number(obj.toString())
  • Number(obj.toString())与num进行比较

字符串与数字

步骤如下:

  • Number(str)
  • Number(str)与数字进行比较

字符串与布尔

步骤如下:

  • Number(str)
  • Number(bool)
  • 两者进行比较

布尔与数字

步骤如下:

  • Number(bool)
  • Number(bool)与num进行比较

null与undefined

他们两个是相等的!

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

在网上找了很多,还没有个准确答案,暂且认为js底层就是规定他们相等的吧。

隐式转换一大问题

console.log(NaN == NaN);//false

暂且先记录这些,后续有了解到继续补充。。。