在js中undefined、null以及空字符串都代表了“空”这么个概念,但是他们有着很大不同的意义。

一.undefined、null、空字符串的区别

空字符串,好理解,就是给字符串变量赋值为空,通常是两个单引或者双引号完事。

null,英文null就是无效的;无价值的,在编程中,表示其后没有可用的数据。null虽然和空字符串都是空,但是区别大了。null代表生命了变量,但是在内存中这个变量没有指向任何数据,空字符串不一样,空字串也是字符串,在内存中是存储有数据的。

undefined:字面意思是未定义,这个变量根本不存在,属于无中生有,js压根不知道这个是啥。跟null的区别就是null声明了变量但是没有指向任何数据,undefined连变量都没声明。

用一个比方形容空字符串,null和undefined

空字符串是一个装满水的杯子,null是一个空杯子,undefined啥也没有。

代码:

var a='';

var b=null;

var c={};

console.log("a=",a);

console.log("b=",b);

console.log("c.name=", c.name);

结果:

a= 

b= null

c.name= undefined

二、验证三者的值是否相同

既然这三者都有着本质的不同,那么他们的值对比是不是一定都是false呢?验证一下:

console.log("''=null:",''==null);

console.log("null=undefined:",null==undefined);

console.log("''=undefined:",''==undefined);

结果:

''=null: false

 null=undefined: true

 ''=undefined: false

结果惊了,null居然等于undefined!到底为什么呢,查了一下百度,说这是ECMA-262 标准规定的,并且undefined继承自null。

如果我们把

console.log("null=undefined:",null==undefined);

改成

console.log("null=undefined:",null===undefined);

输出结果是false,因为js中===不仅比较值还比较类型,null的类型和undefined的类型不一样所以是false。js有六大数据类型:

Number,String,Boolean,Undefined,Null,Object(json)

三、总结

通过比较了解了三者的不同。null和Undefined的值是相同的。在开发的时候尽量还是用===来判断两个变量吧,防止出现一个null和undefined这种情况的出现。