强制转换的疑问

强制转换的疑问

  1. undefined转为数字后不是NaN、null转为数字后不是0么?为何undefined==null是true,能阐述下绿框的原理么?

    https://img1.sycdn.imooc.com//climg/624bbbed09396b1c15801022.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
卡布琦诺 2022-04-06 11:51:16

同学你好。undefined转换确实是NaN,但是在js中有规定,使用==比较两个数据是否相等时,如果两个数据的类型不同,将在进行转换后进行比较,转换的规则如下:如果其中一个操作数的值为Boolean,首先将它转换为数字类型,false 转换为0, true 将转换为1。所以这里undefined==null是true

祝学习愉快!

  • 提问者 慕粉1234567890123 #1

    没懂。undefined是undefine类型,转为数字类型是NaN;null是object类型,转为数字是0;但NaN不与任何值相等啊?怎么NaN==0是True呢?

    2022-04-21 21:19:23
  • 卡布琦诺 回复 提问者 慕粉1234567890123 #2

    同学你好,关于同学的问题解答如下:

    1、同学所说的”null转换为数字类型是0,undefined转换为数字类型是NaN“是进行强制类型转换为数字的结果。

    2、在使用==进行比较时,ECMA规范中规定:如果两个数据类型不同,则会将两个不一样的数据类型,隐式强制转换成相同的数据类型,然后再进行比较

    3、结合代码以及undefined==null的返回结果,推断上述第二条的ECMA规范的规定:

    https://img1.sycdn.imooc.com//climg/626244220935e9eb16321038.jpg

    由此推断出,判断undefined==null时,是用Boolean()方法进行隐式强制类型转换的。将undefined和null转换成Boolean值,然后再继续转换进行比较。因此返回true。

    说明:

    1、undefined==null返回true,属于特殊的判断返回值,需要大家特殊去记忆,记住会进行隐式强制类型转换,返回值是true即可。

    2、也可以从表象上去理解:在JS中,null和undefined都代表着无效的值,所以相等,返回值是true

    4、拓展知识点(了解即可)

    null 有属于自己的类型Null,而不属于Object类型,typeof之所以会判定为Object类型,是因为JS数据类型在底层都是以二进制的形式表示的,二进制的前三位为0会被typeof判断为对象类型,而null的二进制位恰好都是0,因此null被误判断为Object 类型。可以使用如下方法精准检测null的类型:

    Object.prototype.toString.call(null)

    祝学习愉快!

    2022-04-22 14:11:20
  • 提问者 慕粉1234567890123 回复 卡布琦诺 #3

    明白了,谢谢老师。

    2022-04-24 06:12:23
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师