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是一个对象;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类