首页 理论教育JavaScript中未声明与未定义的区别

JavaScript中未声明与未定义的区别

【摘要】:动手写3.5.1typeof检测到未声明的标识符和未定义的变量时均返回undefined。执行3.5.1.html,看到网页输出的提示,打开浏览器控制台,则能看到访问未声明变量undeclaredVariable时抛出的错误,如下图所示。图3.5.1使用typeof检测未声明和未定义的变量使用typeof检测一个外部变量是否为undefined,而不是直接判断该变量的值为undefined,这样可以避免抛出“Uncaught ReferenceError”错误。

1.变量未声明与未定义

使用一个变量前,必须先使用var关键字声明,因为访问一个不存在的变量会触发错误,比如在2.3.1.html中访问未声明的变量block3时会抛出错误“Uncaught ReferenceError: block3 is not defined”。

在实际应用中,一个网页包含多达几十甚至上百个外部JavaScript文件,不同文件维护各自的变量。在本段<script>标签中,如果对其他JavaScript代码有依赖,在使用它们提供的变量前通过typeof检测变量是否为undefined,可以避免直接访问报错,导致程序异常结束。

3.5.1.html分别使用了未声明的变量和未定义的变量,如下所示。

动手写3.5.1

typeof检测到未声明的标识符和未定义的变量时均返回undefined。第一个<script>的if判断语句都为true;未声明的标识符不能直接访问,第二个<script>标签抛出错误“Uncaught ReferenceError: undeclaredVariable is not defined”;第三个<script>标签中if判断语句为true。

执行3.5.1.html,看到网页输出的提示,打开浏览器控制台,则能看到访问未声明变量undeclaredVariable时抛出的错误,如下图所示。

图3.5.1 使用typeof检测未声明和未定义的变量(www.chuimin.cn)

使用typeof检测一个外部变量是否为undefined,而不是直接判断该变量的值为undefined,这样可以避免抛出“Uncaught ReferenceError”错误。

2.属性未声明与未定义

检测对象的属性不存在或者属性的值是undefined时,不管是使用typeof判断还是直接与undefined比较,都可以正常执行。

3.5.2.html分别通过typeof关键字和undefined判断对象的属性是否存在,如下所示。

动手写3.5.2

执行3.5.2.html,输出检测结果到网页,如下图所示。

图3.5.2 检测对象的属性是否存在

默认情况下,所有对象都继承了hasOwnProperty()函数,该函数用于判断当前对象是否拥有指定属性,而不管属性的值是什么类型。