首页 >web前端 >js教程 >解开 JavaScript 的'===”

解开 JavaScript 的'===”

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-27 06:29:10526浏览

Unraveling the

本指南深入研究了 JavaScript 严格相等运算符 (===) 的复杂性,如 ECMAScript 规范的“严格相等比较”部分中所定义。 让我们逐步探索它的功能:

=== 算法:详细了解

=== 运算符采用以下算法来确定相等性:

  1. 类型检查: 运算符首先比较两个值的类型。如果类型不同,它立即返回false。 仅当类型相同时,类型匹配才会进入下一步。

  2. 特定类型比较:

    • 数字:

      • NaN === NaN 评估为 false(分歧的关键点)。
      • 数字相同的值返回true.
      • 0-0 被视为相等 (true)。
    • 字符串:逐个字符比较确定相等。 相同的序列产生 true;否则,false

    • 布尔值: true === truefalse === false 都返回 true。 否则,false

    • 对象(包括数组和函数): === 检查引用相等性。 只有当两个值都指向相同的内存位置(同一个对象)时,它才会返回 true.

    • nullundefined: null === nullundefined === undefined 返回 true。然而,由于类型差异,null === undefinedfalse


为什么NaN === NaNfalse

这是一个常见的混乱来源。 该规范将 NaN(非数字)定义为与其自身不相等。这是因为 NaN 代表无效或未定义的数值结果;将两个未定义的结果视为相等缺乏逻辑连贯性。

示例:

<code class="language-javascript">NaN === NaN; // false</code>

要可靠地检查 NaN,请使用 Number.isNaN()Object.is()

<code class="language-javascript">Number.isNaN(NaN); // true
Object.is(NaN, NaN); // true</code>

为什么 0 === -0true

规范将 0-0 视为等效,因为在大多数数学运算中,它们的行为是无法区分的。 然而,在特定场景中存在细微的差异(例如,1 / 0 产生 Infinity,而 1 / -0 产生 -Infinity)。 对于需要区分的情况,请使用 Object.is():

<code class="language-javascript">NaN === NaN; // false</code>

>对象和参考平等(重新访问)

>

在比较对象时,===评估参考等效。除非它们是内存中的对象相同的对象,否则两个具有相同内容的对象是不相等的:>

<code class="language-javascript">Number.isNaN(NaN); // true
Object.is(NaN, NaN); // true</code>
但是:

<code class="language-javascript">Object.is(+0, -0); // false</code>
进一步探索JavaScript基础

以上是解开 JavaScript 的'===”的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn