为什么1 === 1为真而{} === {}为假

为什么1 === 1为真而{} === {}为假

💡 原文英文,约600词,阅读约需2分钟。
📝

内容提要

在JavaScript中,严格相等运算符(===)比较原始值和对象时行为不同。原始值如数字直接比较值,而对象比较内存地址。因此,1 === 1为真,而{} === {}为假,因为它们是不同的对象。这一理解对编写稳健的JavaScript代码至关重要。

🎯

关键要点

  • 严格相等运算符(===)在比较原始值和对象时行为不同。

  • 原始值如数字直接比较值,而对象比较内存地址。

  • 1 === 1为真,因为它们的值相同。

  • {} === {}为假,因为它们是不同的对象。

  • 原始值包括数字、字符串、布尔值、undefined、null和符号。

  • 对象存储在堆内存中,每个对象都有独立的内存地址。

  • 对象是引用类型,比较时检查引用是否相同,而不是内容。

  • typeof运算符可以帮助识别值的类型。

  • null的typeof返回'object'是JavaScript的历史错误。

  • 数组和函数在内部被视为对象。

  • 函数具有特殊属性[[Call]],使其可调用。

  • 理解原始值和对象之间的区别对于编写稳健的JavaScript代码至关重要。

  • 比较对象时,如果想比较内容,应该使用深度相等检查。

延伸问答

为什么1 === 1为真?

因为1是原始值,比较时直接比较它们的值,两个1相等。

{} === {}为什么为假?

{} === {}为假是因为它们是不同的对象,比较的是内存地址而非内容。

如何使用typeof运算符?

typeof运算符可以用来检查值的类型,例如typeof 42返回'number'。

JavaScript中的原始值包括哪些类型?

原始值包括数字、字符串、布尔值、undefined、null和符号。

如何比较对象的内容?

要比较对象的内容,可以使用深度相等检查,例如使用JSON.stringify()进行比较。

为什么null的typeof返回'object'?

这是JavaScript的历史错误,无法修复而不破坏现有网页。

➡️

继续阅读