前沿:
今天工作中遇到了监视一个变量是undefined,结果判断写的是==null 返回值是true,这个结果引起了我对这两个东西的兴趣。
查询了相关的文章理解并测试了。发现有以下特点:
1.广义上来讲JavaScript中null和undefined是相等的,即null==undefined 返回值是true
2.狭义上来讲JavaScript中null和undefined是不相等的,即null===undefined 返回值是false
3.值得说的是null和undefined在if判断中都是被认定为false,执行else分支的内容
分析:
为什么null===undefined是false呢?我们知道===表示绝对相等,也就是我们常说的值和类型都相等,这个理论告诉我们null和undefined的类型应该就是不同了
typeof(a)是一个object, typeof(b)是一个undefined,所以说两者的类型时不一样的,这也就是null和undefined不是绝对相等的(这里类型问题大家可以查资料深入了解)
typeof(a)是一个object其实这是JavaScript最初实现的一个错误,后来被ECMAScript沿用下来。在今天我们可以解释为,null即是一个不存在的对象的占位符,但是在实际编码时还是要注意这一特性。
我们继续关注下面的结果就可以理解当初设计null和undefined的用意了
目前JavaScript对null和undefined转换成number的结果居然这样(没想到吧)
最后想说的是js中出现undefined的情景还是较多的:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
(图片看不清可以右键在新的连接中打开)