首页 > web前端 > js教程 > 为什么我们不能将数组和对象与===进行比较

为什么我们不能将数组和对象与===进行比较

DDD
发布: 2025-01-29 20:37:08
原创
460 人浏览过

Why can’t we compare arrays and objects with ===

>本文探讨了一个常见的JavaScript问题:为什么在比较数组和对象时,严格的平等运算符(===)无法正常工作。 我们将深入研究JavaScript的内部工作以了解这种行为。 JavaScript

区分原始数据类型和非主要数据类型。 原始类型(布尔,零,未定义,字符串,数字)是按值传递的,而非略有类型(数组,函数和对象 - 所有技术对象)通过参考传递。

原始类型的行为(按价值传递)>

>声明一个原始变量时,该值会直接存储:>

非主要类型行为(通过参考通过)

>

非主体变量存储在对象的内存位置,而不是对象本身:>

<code class="language-javascript">const name = 'John';
const age = 25;</code>
登录后复制
最初,

>保留指向空数组的引用(例如,内存地址H001)。 fruits之后,修改了H001的阵列。push()>

>参考复制

>使用

复制参考变量时,您复制了参考,而不是对象的数据:> =

>
<code class="language-javascript">const fruits = [];
fruits.push('Banana');</code>
登录后复制

现在指向相同的内存位置。 修改一个修改另一个。fruits> yellowFruits>将'菠萝'添加到

>也会更改

,因为它们共享相同的参考。 yellowFruitsfruits>重新分配参考变量

重新分配参考变量会创建一个新的参考:>

原始对象

保留在内存中,但是

现在指向一个新对象
<code class="language-javascript">const fruits = ['Banana'];
const yellowFruits = fruits;</code>
登录后复制

{ name: 'John' }为什么person{ name: 'Mary' }因数组和对象而失败

> ===运算符比较非主要类型的参考。 因此:

>即使===>和

具有相同的内容,它们也具有不同的内存地址,从而在
<code class="language-javascript">let person = { name: 'John' };
person = { name: 'Mary' };</code>
登录后复制
>中。

arr1函数参数和纯度arr3false> 将原始值传递给函数的

复制该值。 但是,传递对象通过参考。 这种区别对于理解纯粹的和不纯粹的函数至关重要。

>

纯函数:

>不要修改外部状态。 它们仅在输入上运行并产生可预测的输出。

>
  • 不纯粹的函数:可以修改作为参数传递的对象,影响函数范围之外的原始对象。
  • 创建一个修改对象的纯函数,在修改之前创建副本:>
  • >在摘要

原始类型按值传递;非主要类型是通过参考传递的。
<code class="language-javascript">const arr1 = ['1'];
const arr2 = arr1;  // Same reference

console.log(arr1 === arr2); // true

const arr3 = ['1']; // Different reference
console.log(arr1 === arr3); // false</code>
登录后复制

比较非主要类型的参考。> 理解参考复制对于编写可预测和可维护的代码至关重要。

>
    纯函数通过不修改外部状态来避免副作用。
  1. >
  2. 要深入研究JavaScript内存管理,请探索呼叫堆栈和内存堆。===

以上是为什么我们不能将数组和对象与===进行比较的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板