深入挖掘:null 和undefined 之间有什么区别?

简单区分总的来说 null 和 undefined 都代表空,主要区别在于 undefined 表示尚未初始化的变量的值,而 null 表示该变量有意缺少对象指

大家好,今天小编来为大家解答深入挖掘:null 和undefined 之间有什么区别?这个问题,很多人还不知道,现在让我们一起来看看吧!

undefined

undefined 是全局对象的属性。也就是说,它是全局范围内的变量。 undefined 的初始值是原始数据类型undefined 。

一张神奇的图片

接下来我们看一张比较经典的图。这张图来自stackoverflow的回答。我还没有找到确切的来源。

表现形式

在我们更深入的了解null和undefine的区别之前,我们首先要知道JS中null和undefine的不同表达方式,这样才能更好的理解null和undefine的区别。

typeof

typeof null //’object’typeof undefined //’未定义’

Object.prototype.toString.call

typeof null //'[object Null]’typeof undefined //'[object Undefined]’

== 与 ===

null==undefined //truenull===undefined //false!null===!undefined //true

Object.getPrototypeOf(Object.prototype)

JavaScript 中第一个对象的原型指向null。

Object.getPrototypeOf(Object.prototype) //null

+ 运算 与 Number()

let a=undefined + 1 //NaNlet b=null + 1 //1Number(undefined) //NaNNumber(null) //0

JSON

JSON.stringify( {a: undefined}) //'{}’JSON.stringify({b: null}) //'{b: null}’JSON.stringify({a: undefined, b: null}) //'{b: null}’ 010-第1010章1010 ‘undefined’ 已被声明

let undefiend = ‘test’

深入探索

typeof null 输出为’object’ 实际上是一个低级错误,但到目前为止还无法修复。

原因是在JavaScript 的初始版本中,值以32 位存储。前3 位表示数据类型的标志,其余位是值。

对于所有对象,前3 位都使用000 作为类型标志。在早期版本的JavaScript 中,null 被认为是一个特殊的值,对应于C 中的null 指针。但是C 中的JavaScript 中没有指针,因此null 表示什么都没有或void,用全0(32)表示。

因此,每当JavaScript 读取null 时,其前端的3 位都会将其视为对象类型,这就是typeof null 返回’object’ 的原因。

为什么 typeof null 是 object?

toString()是Object的原型方法。调用该方法时,默认返回当前对象的[[Class]]。这是格式为[object Xxx] 的内部属性,其中Xxx 是对象的类型。

为什么 Object.prototype.toString.call(null) 输出 ‘[object Null]’

深入挖掘:null 和undefined 之间有什么区别?

这是因为每个类中都重写了toString方法,所以需要调用Object中的toString方法,必须使用toString.call()来调用。

对于Object 对象,直接调用toString() 将返回'[object Object]’ 。对于其他对象,需要调用/apply返回正确的类型信息。

JavaScript 万物皆对象,为什么 xxx.toString() 不能返回变量类型?

很多文章说:undefine的布尔值是false,null的布尔值也是false,所以比较的时候都转为false了,所以undefined==null。实际情况并非如此。

ECMA 在第11.9.3 节中明确告诉我们:

如果x 为null 并且y 未定义,则返回true。

如果x 未定义且y 为null,则返回true。

这是JavaScript的底层内容。至于更深入的内容,如果有兴趣,可以看一下JavaScript的源码。

为什么 == 和 === 对比会出现 true 和 false ?

这涉及JavaScript 中的隐式类型转换。在执行加法操作之前,隐式类型转换会尝试将表达式中的变量转换为数字类型。例如:’1′ + 1 将得到结果11。

当null转为number时,会转为0undefined。当转换为数字时,它将转换为NaN。至于为什么要进行这样的转换,我猜想这是JavaScript 早期的一个糟糕的设计。

从语言学的角度来看:null表示没有指针的显式空值,而undefined表示未知值。在某种程度上,0 表示数字为空。虽然这看起来有些牵强,但这是我现阶段能想到的最好的可能性。

为什么null + 1和undefined + 1表现不同?

其实这个也没有什么好的办法解释。 JSON会删除undefined对应的key。这就是JSON本身的转换原理。

在未定义的情况下,是否有这条数据没有区别,因为它们的表现形式没有区别:

let obj1={ a: undefined }let obj2={}console.log(obj1.a) //undefinedconsole.log(obj2.a) //undefined 但需要注意的是,调用时可能需要修改JSON 格式接口数据中未定义的进行特殊处理。

为什么 JSON.stringify 会将值为 undefined 的内容删除?

JavaScript 通过全局创建只读undefined 来限制undefined,但并不完全禁止定义局部未定义变量。

据说在更高版本的JavaScript中禁止这个操作,但我没有准确的依据。

请不要在任何时候覆盖未定义的变量,即使您的JSON 转换将undefined 转换为” 。也不要这样做,这是非常危险的。

为什么 let undefiend = ‘test’ 可以覆盖掉 JavaScript 自身的 undefined?

总结

这是一个有争议的内容,公众是对的,婆婆是对的。我更喜欢使用null,因为这是定义null 值的显式方法。我无法给出确切的理由。

用户评论

深入挖掘:null 和undefined 之间有什么区别?
Hello爱情风

终于有人好好分析这两哥们了!之前写代码真经常搞混… 感觉定义变量的时候应该加个默认值,这样就不会弄丢这个东西了

    有13位网友表示赞同!

深入挖掘:null 和undefined 之间有什么区别?
半梦半醒i

这篇文章写的真清晰!把null和undefined的不同解释得透彻,以后不用再看代码报错的时候一头雾水了

    有7位网友表示赞同!

深入挖掘:null 和undefined 之间有什么区别?
来自火星球的我

我一直在用它们互换,感觉好像也没什么大关系啊,反正都是空的嘛。直到今天看了你的文章,原来是有区别的!太感谢分享这种知识了

    有14位网友表示赞同!

深入挖掘:null 和undefined 之间有什么区别?
她的风骚姿势我学不来

我还以为 null 和 undefined 就是同一个意思呢,看这篇文才知道原来不一样啊…… 以后写代码要注意区分才行

    有14位网友表示赞同!

深入挖掘:null 和undefined 之间有什么区别?
青瓷清茶倾城歌

确实,null 代表着明确的空值,而 undefined 是由于变量没有被赋值时产生的。这个区别的确十分重要,需要注意!

    有14位网友表示赞同!

深入挖掘:null 和undefined 之间有什么区别?
爱到伤肺i

终于明白了 为什么在 js 的编程中null和undefined会被用作空值。谢谢分享!

    有7位网友表示赞同!

深入挖掘:null 和undefined 之间有什么区别?
沐晴つ

很有启发性!我虽然平时写代码不经常用到 null 和 undefined ,但是理解它们的本质确实对程序设计有帮助。

    有11位网友表示赞同!

深入挖掘:null 和undefined 之间有什么区别?
岁岁年年

之前看一些教程都只是简单提了一嘴,这次终于详细了解了null和undefined的区别!这篇文章真的是太棒了!

    有20位网友表示赞同!

深入挖掘:null 和undefined 之间有什么区别?
眉黛如画

感觉这个题目的重点在于理解 null 和 undefined 在实际应用中的区别,而不是机械地记住它们各自的定义。

    有12位网友表示赞同!

深入挖掘:null 和undefined 之间有什么区别?
孤城暮雨

我认为 null 表示没有值的意思,而 undefined 则表示变量未被正确赋值。希望未来学习更多的编程知识!

    有11位网友表示赞同!

深入挖掘:null 和undefined 之间有什么区别?
柠夏初开

你说的很对!在日常编程中确实经常会遇到 null 和 undefined 的情况,需要认真对待它们之间的区别。

    有8位网友表示赞同!

深入挖掘:null 和undefined 之间有什么区别?
冷风谷离殇

看了这篇文让我更加深刻地理解了null和undefined的重要性。以后写代码要更加仔细。真的感谢你的分析!

    有19位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/199432.html

(0)
小su's avatar小su
上一篇 2024年9月27日 下午9:43
下一篇 2024年9月27日 下午9:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注