gpt4 book ai didi

javascript - 对于 javascript 中的数组,三个等号返回 false。为什么?

转载 作者:可可西里 更新时间:2023-11-01 01:36:10 26 4
gpt4 key购买 nike

我知道 === 通常被称为身份运算符。被比较的值必须是相同的类型和值才能被认为是相等的。那为什么下面一行返回 false?

数组(“asdf”)===数组(“asdf”)

最佳答案

它们不相等,因为在这些语句中的每一个中都创建了一个新数组,每个都是一个全新的数组对象,具有相同的内容。如果您创建两个新对象:

var a = {};
var b = {};

a === b // false

当你创建新的对象、数组、函数等时,一个全新的对象被放入内存中。创建一个与另一个对象具有相同内部结构的新对象不会神奇地导致该对象指向已经存在的对象。这些对象可能看起来相同,但它们并不指向同一个实例。现在,如果您的陈述是这样的:

var arr = ['asdf'];

arr === arr; // true

这显然是真的。 === 是严格相等,不是身份运算符。当对象通过严格的相等运算符运行时,将检查它们是否指向相同的引用。正如我之前解释的那样,每次您使用 new Array[] 时,都会创建一个全新的对象,每个对象都是一个新的不同引用。因此,两个数组或任何对象不可能===为真,除非它们指向完全相同的数组 .仅仅因为正在创建两个具有相同内容的对象并不意味着它们指向同一个对象,只是两个相同但不同的对象。

考虑构造函数:

var Car = function (color) {
this.color = color;
};

var ford = new Car('green');
var chevy = new Car('green');
var toyota = ford;

ford === chevy // false

仅仅因为您使用相同的构造函数并不意味着每次调用它时都会返回相同的对象。相反,每次都会返回一个新对象。仅仅因为两辆车都是绿色的并不意味着它是同一辆车。

ford === toyota // true

现在这是真的,因为两个变量都指向完全相同的 Car 引用。

关于javascript - 对于 javascript 中的数组,三个等号返回 false。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13757109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com