js中隐式类型转换

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

问题是这样的

if ({}) {
    console.log(true)
} else {
    console.log(false)
}
// true

if ([]) {
    console.log(true)
} else {
    console.log(false)
}
// 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方法返回原始值,就返回这个值;
其他情况都返回一个错误
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值