Javascript 中的 undefined 与 未定义(not defined)
在 Javascript 中,有一种致命错误非常常见,即 ReferenceError
:xxx is not defined. 但是,有时候当一个值从未被赋值的时候,并不会出错,而是返回 undefined
,有必要对这两者进行梳理。
undefined
undefined
表达的含义有三种情况:
- 这个变量存在,但是并没有给予任何值。
- 一种普通的数据类型和一种值。你可以手工将任何变量赋值为 undefined,此时其没有特别含义。
- 一个存在的对象中的一个不存在(没有声明)的值,会被认为是 undefined。
对这三种情况进行归纳,undefined 可以如下总结:
- 它是一种数据类型,也是一种值。
- 有这种值的时候,要么它本身被赋值,要么本身存在,要么其所在对象存在。完全不存在的变量不会是 undefined(注意,此处还有坑,往后看)。 下面举几个例子。
一个声明但没有赋值的变量为 undefined
var p;
alert(p); // undefined
一个不存在的对象成员为 undefined
var p = { };
alert(p.a); // undefined
如果 p 还有一个成员 b
,其值被手工赋值为 undefined,如何区分不存在的成员 a 和存在的成员 b?可以使用 Object.prototype.HasOwnProperty() 方法。
一个手工赋值的 undefined
var p = 5;
p = undefined;
alert(p); // undefined
从上面的三个例子可以清楚看出 undefined
的一些情况。undefined 的优点在于正常使用有此值的变量不会抛出异常。
未定义(not defined)
一个 未定义
(not defined) 的变量是完全没有任何声明的变量。这样的变量在使用时会直接抛出致命错误。但是,如果使用 typeof 来判断这样的变量,不但不会出错,而且竟然会返回 undefined
,这使得无法使用 typeof 来区分这两种情况。
题外话:我帮你整理了包括 AI 写作、绘画、视频(自媒体制作)零门槛 AI 课程 + 国内可直接顺畅使用的软件。想让自己快速用上 AI 工具来降本增效,辅助工作和生活?限时报名。
© 转载需附带本文链接,依据 CC BY-NC-SA 4.0 发布。