在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这种情况的出现。