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的值







网友评论