JavaScript中有7种数据类型,
Undefined
,Null
,Boolean
,Number
,String
,Object
,Symbol
.undefined
和null
是其中两个的数据类型的值。我们先看Undefined
。
Undefined 类型
Undefined
类型只有一个值,即特殊的undefined
。在使用let
,const
,var
声明变量但未对其加以赋值进行初始化时,这个值就是undefined
。
let message;
console.log(message === undefined);//true
在上面的例子里,变量声明了,但是没有初始化就会是undefined
。
let message = undefined;
console.log(message === undefined);//true
在上面的例子里我们显示的声明了变量的值是undefined
,结果比较相同。
一般而言,我们并没有必要进行上面的操作。不过没有初始化的值和未声明的变量还是有区别的。
let message;//变量声明了,默认的初始化值就是undefined
// let age;
console.log(message);//undefined
console.log(age);//报错
上面的例子里,我们声明了变量message
,然后打印,结果是undefined
。而age
我们并没有声明,结果报错了。
然而我们通过typeof
来进行类型判断时,两种变量都是undefined
。
let message;//
// let age;
console.log(typeof message);//undefined
console.log(typeof age);//undefined
在<JavaScript高级程序设计>一书中,这里这样解释:对未初始化和未声明的变量执行typeof
操作符都返回了undefined
。但是这个结果有其逻辑上的合理性。因为虽然这两种声明从技术角度看有本质区别。但实际上无论对哪种变量也不可能执行真正的操作。
undefined
这个值的引入是为了正式区分空对象指针与未经初始化的变量!
Null类型
Null
类型是第二个只有一个值的数据类型。这个特殊的值就是null
.从逻辑上讲,null
值表示一个空对象指针,而这也正式使用typeof
操作符时会返回object
的原因。如下面的例子:
let car = null;
console.log(typeof car);//"object"
如果定义的变量准备将来用于保存对象,那么最好是将该变量初始化为null
.这样好比较。只要直接坚持null
值就可以知道相应的变量是否已经保存了一个对象的引用。
if(car !== null){
//dosomething
}
实际上undefined
值是派生于null
的值。因此ECMA-262
规定对它们的相等性测试要返回true
。当然是两个==
,不是严格等于。
console.log(undefined == null);//true
现在知道它们的区别了吗?
-
undefined
是为初始化的变量。 -
null
是一个空对象指针.typeof null //"object"
-
undefined
值是派生于null
的值
网友评论