>本文探讨了一个常见的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
>将'菠萝'添加到
,因为它们共享相同的参考。
yellowFruits
fruits
>重新分配参考变量
重新分配参考变量会创建一个新的参考:
保留在内存中,但是
现在指向一个新对象<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
函数参数和纯度arr3
false
>
将原始值传递给函数的
>
纯函数:>不要修改外部状态。 它们仅在输入上运行并产生可预测的输出。
>原始类型按值传递;非主要类型是通过参考传递的。
<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>
比较非主要类型的参考。
===
以上是为什么我们不能将数组和对象与===进行比较的详细内容。更多信息请关注PHP中文网其他相关文章!