关于比较==操作符中的强制类型转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于比较==操作符中的强制类型转换相关的知识,希望对你有一定的参考价值。

1、在numberstring进行比较,需要将string类型数据进行toNumber转化成number类型进行比较

42 == ‘42’ //true

//即type(x) 如果是number类型,type(y)是string类型,比较 x == toNumber(y)

2、boolean类型和其他数据类型进行比较,将true转换成1,fasle转换成0

false == 0  //true

true == 1 //true

true == 2 //false

true == ‘2‘ //false

//因为true被转换成number类型,为数字1,在 1==‘2’ 比较里,肯定是返回false

3、nullundefined

null == undefined //true

function foo(param) {
  if(param == null) {
    // some code      
  }      
}

//所有有时也会用在判断函数中是否传入一个参数 

null == 0 //false

null == false //false

undefined == 0  //false

undefined == false //false

//null和undefined 和其他数据使用==比较操作符都返回false

 

4、对象其他类型,将对象进行toPrimitive操作进行转化,当对象是date类型时

先进行toString()操作,如果返回的是基本类型数据,那么返回该数据,否则进行valueOf()操作

当对象是数组或者普通对象时,先valueOf操作,如果返回的数据不是基本(值类型,非引用类型)类型数据,那么进行toString操作

[] == 0  //true

[] == ‘‘ //true

//数组是对象,对[]进行一次valueOf操作,得到的还是原数组,所以继续进行toString操作,得到空字符串‘ ‘
 在 [] ==0 比较中,空字符串被转换成数字0,所有 0 == 0 ,而 ‘ ‘ ==‘ ‘自然也是true

 

总结: 也就是说,在==操作符进行比较的过程中,如果两方数据类型不同,总是需要对其做类型转换

最后比较的类型总是number或者string

以上是关于关于比较==操作符中的强制类型转换的主要内容,如果未能解决你的问题,请参考以下文章

关于JavaScript中的相等全等操作符

关于继承中的强制类型转换

关于C++中的类型转换

关于java中的short和int类型转换的问题

关于强制类型转换(c语言)

请问一些关于char类型数据转换成16进制的问题!! 以及移位操作符~ 拜托了~~~~~