其他分享
首页 > 其他分享> > js中隐式类型转换

js中隐式类型转换

作者:互联网

决定写这个东西呢,主要是在开发过程中遇到了一个问题对于空对象( {} )的判断 

问题是这样的

if ({}) {
    console.log(true)
} esle {
    console.log(fasle)
}
// false

if ([]) {
    console.log(true)
} esle {
    console.log(fasle)
}
// true


console.log({} ? true : false)
// true

这就奇怪了,为什么都是对{}判断却得出了不一样的结果呢,于是找了一些资料,把隐式类型转换整理记录一下,

一、  true和false在js中是如何转换的呢?  看下图

数值类型   转换成布尔值
undefined   false
null   false
boolean   true是true,false是false
number   +0、-0、NaN为false,其他为true
string   如果字符串为空(长度是0)就是false,其他都是true
object   true

 

二、  ==操作符背后的类型转换(主要说明不同类型间的比较)

类型(x)   类型(y)   结果
null   undefined   true
undefined   null   true
number   string   x == toNumber(y)
string   number   toNumber(x) == y
boolean   任何类型   toNumber(x) == y
任何类型   boolean   x == toNumber(y)
string|number   object   x == toPrimitive(y)
object   string|number   toPrimitive(x) == y

 

toNumber 和 toPrimitive 都是内部方法,并根据一下表格对其进行估值

1、toNumber

值类型   结果
undefined   NaN
null   +0
boolean   如果是true,返回1;如果为false,返回+0
number   数字对应的值
string   将字符串解析成数字,如果字符串中包含非数字,返回NaN,如果由数字字符组成,转换成数字
object   Number(toPrivitive(value))

2、toPrivitive

值类型   结果
object   如果对象的valueOf方法的结果是原始值,返回原始值。
如果对象的toString方法返回原始值,就返回这个值;
其他情况都返回一个错误

标签:类型转换,false,string,中隐式,number,js,toNumber,console,true
来源: https://blog.csdn.net/qq_36356218/article/details/90213628