Null 和 Undefined 之间的区别

释放双眼,带上耳机,听听看~!

Null 和 Undefined 之间的区别
你可能听说过 JavaScript 中的操作方法和实际操作是一样的。今天,您将了解它们在语法、语义和运行时方面是如何完全不同的。nullundefined

语法

这是最容易解释的。看:

// This is null:
null

// This is undefined:
undefined

两者使用完全不同的语法结构,这是因为它们表示两种不同的事物。

语义学

编程语言中的一切都是有原因的。没有两件事是相同的。如果您认为它们是,也许您没有考虑导致其概念和设计的用例。

今天讨论的两个也不例外。按如下方式考虑 和 语义值 会有所帮助:nullundefined

  • undefined隐含的价值缺失;
  • null极度缺乏价值的。

解释这一点的最好方法是举个例子。我会厚颜无耻地偷走 Ryan Florence 写的那篇:

我的钥匙在柜台上吗?

  • undefined: 不知道,我没看。
  • null:我检查了,没有键。

用更编程的术语来说,指向内存中已分配但尚没有任何值的空间。,则指向内存中分配的指针,该指针表示无效的内存访问。undefinednull

斯蒂芬·柯蒂斯 (Stephen Curtis) 写了一篇关于这个主题的精彩文章。我强烈建议你阅读它。

更实际地说,用于描述价值的缺失,因为我们不知道它是否存在,而描述价值的缺失,因为我们知道它不存在。is 直到我们获取它们,如果服务器没有返回任何用户,则 becomes 。undefinednulluserundefinedusernull

运行

当然,两者在 runtime 上的行为完全不同。

undefined是 Literal 类型。这就是为什么你要检查一下 type 是否根本没有定义。typeof thing === 'undefined'thing

null是一个对象。如果你觉得这很奇怪,下一句话就会让你的世界天翻地覆。

JavaScript 中的一切都是一个对象。

字符串是对象,数字是对象,数组是对象,类是对象,而对象是对象。指向值的所有东西都是一个对象。为方便起见,会缩小一些指针的类型,例如 is a string,而不是 object。既然你刚刚知道这是一个指针,请考虑它可能是什么类型。typeof 'foo'null

这也是为什么使用严格相等运算符 (包括它们的类型进行比较) 时不匹配,但在使用松散相等运算符 (忽略类型并专注于值,两者都缺少值) 时不匹配的原因。nullundefined=====

在运行时,隐式和显式缺失值之间的差异可以帮助您处理不同的情况。不过,这通常是我们追求的价值,而不是它缺失的原因,这可能会导致误解,例如关于和成为同一事物的误解。nullundefined

运行时行为也证实了这里的语义差异。

const user = { name: undefined }


// Referencing the existing key that
// equals to undefined...
user.name // undefined


// ...yields the same value and type
// as referencing a non-existing key.
user.address // undefined

等于 的对象键被视为缺失。等于的键仍然存在。亲自看看:undefinednull

JSON.stringify({ a: undefined, b: null })
// {"b":null}

希望这能为你解决这个问题。请随时与仍然犯错的人分享这篇文章,并保持原样。nullundefined

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
技术教程

理解 TypeScript 泛型

2024-9-2 15:11:06

技术教程

为什么 Fetch Promise 不对错误响应进行拒绝

2024-9-2 16:15:39

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索