"==" undefined== null ?

1、undefined == null // true

这个奇葩我也不知道为什么就相等了。毕竟在进行类型转换的时候都是转换为数字,undefined 转换为数字是 NaNnull 转换为数字是0

2、null == 0 // false

null有属于自己的类型 Null,而不属于Object类型,typeof之所以会判定为 Object类型,是因为JavaScript数据类型在底层都是以二进制的形式表示的,二进制的前三位为0 会被 typeof 判断为对象类型,而null 的二进制位恰好都是 0 ,因此,null 被误判断为 Object 类型。
因为null在JS 渲染引擎里面是转换为 object对象,对象转换为原始类型使用的是 toString()或者是 valueOf(),但是null没有 toString()和 valueOf(),所以没办法用下面的方法进行转换,具体为什么,我也不是很清楚。知道的话告诉我一下。

  • 对象转换成字符串 的过程
    • 如果对象具有toString()方法,则调用这个方法,如果返回一个原始值,Javascript将这个值转换为字符串,并返回这个字符串结果。
    • 如果对象没有toString(),或者这个方法并不返回一个原始值,那么JavaScript会调用valueOf()方法,如果存在这个方法,则JS 会调用它,如果返回值是原始值,javaScript将这个值转换为字符串,并返回这个字符串的结果。
    • 否则,javascript无法从 toString()或valueOf()获得一个原始值,因此这时它将抛出一个类型错误异常。
  • 对象转换为数字 的过程
    - 它会首先尝试使用 valueOf()方法:
    - 如果对象具有valueOf()方法,后者返回一个原始值,则javaScript将这个原始值转换为数字并返回数字
    - 如果对象具有toString()方法,后者返回一个原始值,则JavaScript将其转换并返回。(对象的toString()方法返回一个字符串直接量,JS将字符串转换为数字类型,并返回这个数字)

3、undefined == false // false

  • 需要注意的是: 一个值转换为另一个值并不意味着两个值相等。比如,入股在期望使用布尔值的地方使用 undefined 它将会转换为 false,但这不表明 undefined == false。 if语句将undefined转换为false,== 运算符并不试图将其操作数转换为布尔值。!!!

4、包装类与原始值

  • JS会在必要时将包装类转换为原始值, ”==“ 运算符将原始值和其包装类对象视为相等,但是 “===” 全等于运算符将他们视为不等,因为 通过typeof 可以看到原始值和其包装类的不同。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值