JS中的undefined到底是什么?
JavaScript中的Undefined。
我们已经看到了创建执行上下文的第一阶段,其中有一个用于全局执行上下文的全局对象。有一个特殊的变量叫做this,它总是存在的。这种现象称为提升,其中设置了变量和函数。
对于变量最初设置为undefined。
这是什么意思呢?
让我们回过头来举一个简单的例子:
index.js
var a;
console.log(a);
得到:
如果我们不使用var
直接a
:
实际上会直接报未定义的错,但是有些人会认为,Undefined和not defined指的是同一件事。其实不是的,
Undefined是已经存在的变量,但是没有赋值,Javascript会给这个已经存在的变量一个默认的undefined值。
下面我们来做一个验证:
index.js:
var a;
console.log(a);
//===在JS中会从数据类型与值两方面进行比较,称之为严格比较相对安全。
if(a===undefined){
//注意这里undefined,不是字符串,而是JS的关键字。所以不加''
console.log("a is undefined");
}else{
console.log("a is not defined")
}
我们来看下结果:
如果我们现在给变量a
赋值"helloworld"
:
但是我们来看下不声明变量a
,但是访问变量a
:
我们会直接得到一个未定义(not defined)错误。这是因为在初始执行上下文创建阶段中,当我们访问的a
变量没有被声明过时,也就说明不会被分配内存空间。因此,当执行该代码时,它说:“嘿,老弟,我根本没有在内存中”。因此它提供了not defined
,错误信息。当然了,这是浏览器中的JavaScript引擎所提供的信息。
但是,当我们声明var a
时,在创建阶段将a
放入内存。因此,执行上下文看到了var a
并在内存中设置了a
。
即使我没有将其设置为值,JavaScript引擎已经将其设置为undefined
的特殊值。
因此,undefined
并不像是空的或者不存在。它实际上并不存在但它是一个值,实际上占用了内存。这是一个特殊的JS关键字。一个特殊的值,表示这是JavaScript最初设置的值。
不要将变量设置为Undefined
切勿将自己的变量设置为等于undefined
的变量。那么真的很难分辨某些变量是否是未定义的,这真的很有用。
这个习惯能够将帮助我们进行调试,发现那些变量是声明了但是没有赋值的。
总结
我们再来回顾一下,undefined
是一个特殊值,也是JavaScript中的特殊关键字。这是变量在创建阶段获得的一个默认值。创建执行上下文的第一阶段设置变量的内存然后在该存储空间中放入名为undefined的值。这就是JavaScript所称之为的未定义。
那我们在声明变量的时候,可以var a;
然后在使用的时候再赋值a
或者var a="helloworld";
然后直接使用该变量。