隐式类型转换不明白
# 具体遇到的问题
视频里讲解的隐式类型转换的本质是调用了Number()函数,那么有时候为什么又调用Boolean()函数呢?
例如:null == undefined; // 结果是true,这里比较值,调用的就是Booelan()函数;将近4000块钱的教程,视频里老师的知识点都不讲完整为什么,课后的题目有的总要我们自己去猜?
# 报错信息的截图
# 相关课程内容截图
# 尝试过的解决思路和结果
# 粘贴全部相关代码,切记添加代码注释(请勿截图)
在这里输入代码,可通过选择【代码语言】突出显示
正在回答
同学你好,视频中讲解的是正确的,目前阶段所学的的数据类型使用==进行比较时,不同数据类型之间,默认是会先使用Number()进行隐式类型准换,转成数值后再进行比较。
老师在同学的上一个提问中解释的null和undefined在比较时,会隐式类型转换成布尔值这个说法是错误的,非常抱歉给同学造成了困扰,这里重新给同学梳理下null == undefined; 为什么等于true。
由于null和undefined比较特殊,在进行比较时,并不会进行隐式类型转换,可以参考下面的测试理解,undefined 与 布尔值false进行比较,返回结果是false,说明undefined在比较的时候并没有经过隐式类型转换为false。null也是同样是的道理。
那么为什么undefined == null 返回的结果是true呢, 因为JavaScript最初设计时,模仿了其他语言,只设置了null 来表示无的情况,但是后来JavaScript的设计者Brendan Eich觉得这样不够,所以又增加了undefined这个数据类型用来表示无的情况,使用Number()方法转换结果为NaN,虽然使用typeof检测两者返回的结果是不一样的,但是由于它俩表示的意思非常相近,默认它俩是相等的,所以使用 == 比较两者时,返回结果为true。
所以说,js语法规定的undefined == null 返回结果是true,这属于一种特殊的情况,需要特殊记忆的。
祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星