首页 > 自考资讯 > 自考资讯

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

2024-10-09

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

变量undefined 基本上没有定义。定义了隐藏的空值null,但它不指向内存中的任何对象。

MDN 中给出的定义

null

值null 是一个文字,与undefined 不同,它不是全局的。对象的一个属性。 null 是缺失标志,表明该变量没有指向任何对象。将null 视为尚未创建的对象可能会更容易理解。在API 中,当返回类型预计为对象但没有关联值时,通常会使用null。

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

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

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]'

这是因为每个类中都重写了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的源码。

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

为什么 == 和 === 对比会出现 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 的違い了!感觉之前搞混这两个概念导致好多代码错误啊

猜你喜欢

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

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

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

    来源:中国自考网 2024-10-09
  • 不明确的

    不明确的

    今天,就让我们来揭秘一颗平凡无奇的马铃薯,它竟然能变身成为多种美味华丽的佳肴,不仅美味可口,还拥有丰富的营养价值。不得不说,马铃薯真的是个“隐形富豪”了!接下来

    来源:中国自考网 2024-10-09
  • undefined 和null 的区别

    undefined 和null 的区别

    引言JavaScript 作为一门广泛应用于前端开发的语言,其灵活性和强大的功能使其成为构建动态Web应用的首选。然而,对于初学者来说,理解 JavaScrip

    来源:中国自考网 2024-10-09
  • 丰田提交“TZ”商标申请,该商标将成为雷克萨斯新款三排电动SUV的名称

    丰田提交“TZ”商标申请,该商标将成为雷克萨斯新款三排电动SUV的名称

    雷克萨斯正在筹备一款三排座电动SUV,这几乎已经是确定的事实。虽然它的具体名称尚未确定,但很有可能会使用“TZ”标识。这种推测是基于丰田最近向欧洲知识产权局(E

    来源:中国自考网 2024-10-09
  • QQ上出现的tz是什么?

    QQ上出现的tz是什么?

    tz就是所谓的投资。这两年QQ里面打字圈衍生出了投资圈,里面的投资大部分都是上面所谓的主创自费的,像这种大部分都是会借钱跑路的,,只有少数自费是稳定的(因为他们

    来源:中国自考网 2024-10-09
  • 是时候冲刺了,每天10分钟,10天背初二上册词汇(第八单元)

    是时候冲刺了,每天10分钟,10天背初二上册词汇(第八单元)

    育才双师课堂公益课,每天10分钟10天背完初二上册单词。学习方法:请严格执行下面的操作,每天只需15分钟。真简单,每天10分钟10天背完初二上册单词(Unit-

    来源:中国自考网 2024-10-09
  • Yagami 第8 单元如何制作香蕉奶昔?单词和发音

    Yagami 第8 单元如何制作香蕉奶昔?单词和发音

    八上单词及标准读音 Unit 8 How do you make a banana milk shake?shake /ʃeɪk/ n.&v.摇动;抖动 mil

    来源:中国自考网 2024-10-09
  • 42个动物英语单词!小学生:看看你认识几个?

    42个动物英语单词!小学生:看看你认识几个?

    各类动物的单词大家都会记得吗?fish?dog?cat?下面小编为大家整理了43种动物的英语单词,配合中英文和音标。基本涵盖了最常见的一些动物的“英语词汇”。f

    来源:中国自考网 2024-10-09
  • 单词学习火鸡

    单词学习火鸡

    turkey /ˈtɜːrki/n. 火鸡;火鸡肉;土耳其(Turkey)1540s, originally "guinea fowl" (Numida mel

    来源:中国自考网 2024-10-09
  • 英语早读必听:八年级英语卷1单元8单词及录音

    英语早读必听:八年级英语卷1单元8单词及录音

    Unit 8 shake /ʃeɪk/ n.&v.摇动;抖动milk shake 奶昔blender/'blendə(r)/ n.食物搅拌器turn on 接通

    来源:中国自考网 2024-10-09