原始值就是值本身不可改变,并且没有方法和属性。操作的时候看似操作原始值,其实是操作它的副本。
Null 代表空指针,就是没有对象存在,它不是全局对象的属性。Null type对应唯一的字面量值null
Undefined 是全局对象的属性,它对应的唯一字面量值undefined
出现的情况:
1.变量声明没有赋值,变量的默认值是undefined
2.函数没有return,那么默认返回值是undefined
3.方法或是语句中没有赋值的变量,返回值是undefined
栗子?
不要把undefined作为变量名赋值,这样不仅会改变undefined的值,也会改变它的类型,这种情况的验证条件是不在全局环境中。undefined并不是关键字,所以避免这种情况
如果要判断一个值是不是undefined,有三种方式
1.直接比较值跟字面量undefined,这是比较要用全等===
2.就是用typeof 值跟类型’undefined’比较,这个可以在变量没有声明的情况下判断,而不会出错
3.用void 0代替undefined
栗子?
参考资料:https://developer.mozilla.org...
https://developer.mozilla.org...
扩展补充:
用void 0 代替undefined很好,为什么要代替undefined?为什么是void 0而不是其他的?
原因:1.undefined在全局环境下,已经是只读属性不可改变,但是在块作用域里还是可以改变的,因为它不是保留关键字,所以无法避免被重新赋值改变。这也是为什么需要替代它的原因。
2.因为void这个操作符,后面跟上任何的表达式或是语句,返回值都是undefined,而void 0是所有表达式中最短的一个,最完美的是void 0还不能重写
3.在这里我也终于明白了,当初想让链接跳转失效,在a标签这样写的用意,就是因为void(0)返回为undefined
<a href="javascript:void(0);">
Click here to do nothing
</a>
4.也理解了在一些源码中,看到函数关键字function的前面会有void,它可以迫使函数声明变成函数表达式
栗子?
参考资料:https://developer.mozilla.org...
http://web.jobbole.com/86145/
Null vs Undefined
区别:null表示’空’的对象,转数值为0,undefined表示‘此处无意义’的原始值,转数值为NaN
undefined强调’不存在’,适用的场景:
比如:
1.不存在的初始值
2.不存在的对象属性,或是数组项
3.不存在的函数返回值
4.不存在的函数调用参数
栗子?
null的适用场景:
1.遍历一个不存在的dom节点
2.在页面销毁的时候,把不用的对象赋值为null
二者同为没有值的代表,在判断中都是false,但你要是想当然觉得它们相等,那就上当了。别忘了它们是不同的类型
栗子?
参考资料:https://yanhaijing.com/javasc...