js的类型转换总结

188 阅读2分钟

就两种

一:对于布尔值的转换

除了NaN,null,undefine,0,空字符,false,其他都是转为true

举几个例子:

if(""){console.log('暴躁')} 控制台会打出暴躁不?

当然不会啦,因为 "" 是空字符串

那么 if(" "){console.log('暴躁')} 控制台会打出暴躁不?

会。为啥?因为 " " 是空白字符串而不是字符串,我丢!


二:对于 == 比较运算符的转换

  1. 两边都是原始类型的就 用Number() 函数转成数字去比较

    举些栗子

    '我丢' == true ? '我丢' 去Number()一下肯定是 NaN啦,true肯定是1啦,那能相等吗?肯定不行(false转化后是0喔)

    "" == 0" " == 0 结果也都是true,为啥?请自己Number()一下

    !" " == true!" " == false 呢?像我这样的sb一开始肯定以为 空白字符串转化为数字是0啊,那么取反不就是true咯,,那么!" " == true结果就是true,!" " == false结果就是false咯。

    然而!请注意运算符!,我们的先转换成布尔值再转成数字。。。也就是 " "转成布尔值是true (请看一:对于布尔值的转换),取反变成false

    !" " == true结果就是false,!" " == false结果就是true

  2. 特别的:undefined转为 NaN, null转为0 ,但是!undefined == null 结果是他妈的 true 不要问我为什么,我也不知道。

    他们两个跟其他的类型比的时候都是false,可能这就是基佬吧,爱了爱了。

  3. 一边对象跟一边原始类型的比较,原始类型是啥类型,对象就转换成啥类型

    此处请参考阮一峰大佬的强制类型转换 wangdoc.com/javascript/…

    其实就是根据原始类型的不同调用自身的 valueOf 和 toString 方法,但如果你对对象的 valueOf 和 toString 进行了重写,那么会优先调用你改写的方法。

    而布尔值是双方都转换成数字去比较。