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