关于比较==操作符中的强制类型转换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于比较==操作符中的强制类型转换相关的知识,希望对你有一定的参考价值。
1、在number和string进行比较,需要将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、null与undefined
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
以上是关于关于比较==操作符中的强制类型转换的主要内容,如果未能解决你的问题,请参考以下文章