Undefined in Javascript
Reference: https://juejin.im/post/5bf57e8ef265da612c5d8439
Javascript中有三种Undefined:分别是类型、值和变量Undefined。
类型Undefined
类型Undefined是Javascript 的一种基本类型,处于六大类型之一。
值Undefined
值Undefined是类型Undefined唯一的值。任何未被赋值的属性都被假定为 undefined(ECMA 4.3.9 和 4.3.10)。没有 return 语句的函数,或者 return 空的函数将返回 undefined。函数中没有被定义的参数的值也被认为是 undefined。
这里需要注意的是void 0
等不返回值的语句,也会返回undefined。而且,在非严格模式下,稳定获得值undefined的方式就是void 0
,因为void不会被重新定义,但是undefined变量(下文提到)有可能被重新定义。另外这个表达式在提供noop函数的时候也是可以的。
顺便讲void操作符。这个操作符将执行后面的表达式,但是不返回值。但是这种东西不推荐在a href中使用。javascript:开头的伪url并不是很适合去做这个,不如直接留空或者填一个#然后onclick=return false。
变量Undefined
undefined (variable) 是一个初始值为 undefined (value) 的全局属性,因为它是一个全局属性,我们还可以将其作为变量访问。为了保持一致性,我在本文中统一称它为变量。毋庸置疑,给 undefined 变量重新赋值是非常不好的做法。事实上,ECMA 5 不允许这样做(不过,在当前的浏览器中,只有 Safari 强制执行了)。
TypeError和ReferenceError?
TypeError常见于声明了变量(var
或者let
)然后没有赋值的情况下使用了点操作符。这是因为属性的基值受 CheckObjectCoercible (ECMA 5 9.10 到 11.2.1)的影响,在它尝试将 Undefined 类型转换为 Object 的时候会抛出 TypeError。
根据定义,既不是属性也不是变量的引用是不可解析的,并且会抛出一个 ReferenceError