js中null与undefined的区别

一、相似性:

1、在JavaScript中将某个变量赋值为undefined或null,实际上没有太大的差别,两者都是表示某个变量的值为“空”。

2、undefined和null在if语句中,都会被自动转为false,相等运算符甚至直接报告两者相等。

复制代码
if(!undefined)
   console.log('undefined is false')
//undefined is false


if(!null)
   console.log('null is false')
//null is false

undefined == null   //true
复制代码

但是:

undefined === null  //false

null和undefined 两者相等,但是当两者做全等比较时,两者又不等。原因:

null: object类型,代表“空值”,代表一个空对象指针

undefined: undefined类型

二、历史原因

与javaScript的历史有关。1995年时,最初像java一样,只设置了null作为表示“无”的值。

根据c语言的传统,null被设计为可以自动转为0。

Number(null)
//0

5+null
//5

但是,javaScript的设计者Brendan Eich,觉得这样做还不够,有俩个原因。

1、null像在java里一样,被当成一个对象。但是,js的数据类型分为原始类型(primitive)和合成类型(complex)两大类,Brendan Eich觉得表示“无”的值最好不是对象。

2、js的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换类型或默默地失败。Brendan Eich觉得如果null自动转为0,很不容易发现错误。

so, Brendan Eich又设计了一个undefined。

三、最初设计

javaScript的最初版本是这样区分的:

null是一个表示“无”的对象,转为数值时为0;

undefined是一个表示“无”的原始值,转为数值时为NaN。

Number(undefined)
//NaN

5+undefined
//NaN

四、目前的用法

null和undefined基本是同义的,只有一些细微的差别。

(一)null表示“没有对象”,即该处不该有值。典型用法是:

1、作为函数的参数,表示该函数的参数不是对象。

2、作为对象原型链的终点。

Object.getPrototypeOf(Object.prototype)

//null

(二)undefined表示“缺少值”,即此处应该有一个值,但是还未定义。典型用法:

1、变量被声明了但未被赋值,就等于undefined

2、调用函数时,应提供的参数未提供,该参数等于undefined

3、对象没有赋值的属性,该属性的值为undefined

4、函数没有返回值时,默认返回undefined

复制代码
var i;
i   //undefined

function f(x){
   console.log(x)      
}
f()   //undefined

var o=new Object();
o.p   //undefined

var x=f(x)
x   //undefined
复制代码

 五、总结区别

1、undefined不是关键字,而null是关键字;

  var undefined=""  //undefined

  var null=""   //会报错

2、undefined和null被转换为布尔值的时候,两者都为false;

3、undefined在和null进行==比较时两者相等,全等于比较时两者不等

4、使用Number()对undefined和null进行类型转换时前者为NaN,后者为0

5、undefined本质上是window的一个属性,而null是一个对象;

posted @   阳光下的向日葵  阅读(1902)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示