JavaScript 中的 隐式转换

隐式转换介绍

  在js中,当运算符在运算时,如果 两边数据不统一,CPU就无法计算,这时我们编译器会自动将运算符两边的数据做一个数据类型转换,转成一样的数据类型再计算

这种无需程序员手动转换,而由编译器自动转换的方式就称为 隐式转换

隐式转换规则

转化类型 运算符 说明
转换成 String + ‘任意字符串’ + 任意一边有字符串
+ 都认为字符串连接符
转换成 Number ++/-- (自增自减运算符)
+ - * / % (算术运算符)
> < >= <= == != === !=== (关系运算符)
转换为 Number
再进行运算
转换成 Boolean !(逻辑非运算符) 自动转化成 Boolean

得到 false : 0 , -0 , NaN , null , undefined , “空字符串” , false ,document.all()
其他情况为 true

例:

console.log( 1 + 'true')    // '1true'  字符串连接符
console.log( 1 + true )     //  2		1 + Number(true)
console.log( 1 + undefined )// NaN      1 + Number(undefined)
console.log( 1 + null )     // 1        1 + Number(null)
console.log(true + true)    // 2		Number(true) + Number(true)
//  Number('2') > 10
console.log( '2' > 10 )   // false

// 两边是字符串将按照 unicode 编码来转成数字,从左往右比较
console.log( '2' > '10' )   // true
console.log( 'abc' > 'aad' )   // true

// 特殊情况(无视规则)
console.log( null == undefined )   // true
console.log( NaN == NaN )   // false

对象/数组 隐式转换

复杂数据类型在隐式转换时会先转成String,然后再转成Number运算
空数组的 toString() 得到 空字符串
空对象的 toString() 得到 字符串 ‘[object Object]’
JavaScript 中的 隐式转换_第1张图片

//  [1,2].valueOf().toString() == '1,2'
console.log([1,2] == '1,2')   //true

// {}.valueOf().toString() == '[object Object]'
console.log({} == '[object Object]')	//true

var a = {
  i: 0,
  valueOf: function(){    //自己定义 valueOf() ,让其不再往原型链上找 valueOf()
    return ++a.i
  }
}
if(a == 1 && a == 2 && a == 3){   //每次运算都会调用一次 a 的 valueOf() 和 toString()
  console.log('1')
}
console.log([] == 0)    //true    [] => '' => false
console.log(![] == 0)   //true    ![] => false


console.log([] == [])   //false     引用地址不一样
console.log([] == ![])  //true      [] => '' => false   ![] => false


console.log({} == {})   //false     引用地址不一样
console.log({} == !{})  //false     {} => '[object Object]' => true      !{} => false

文章参考:https://blog.csdn.net/itcast_cn/article/details/82887895

你可能感兴趣的:(javascript)