标题几乎说明了一切,但在这里写出:
b = [1, 2, 3, 4];
c = [...b];
b === c; //false
为什么?
答案 0 :(得分:4)
这是常规数组identity / strict equality comparison的工作原理。请记住,数组是对象:
严格的等式比较算法
比较x === y,其中x和y是值,产生true或false。这样的比较如下进行:
- 如果Type(x)与Type(y)不同,则返回false。
- 如果Type(x)为Undefined,则返回true。
- 如果Type(x)为Null,则返回true。
- 如果Type(x)是Number,那么
- 如果x为NaN,则返回false。
- 如果y为NaN,则返回false。
- 如果x与y的数字值相同,则返回true。
- 如果x为+0且y为-0,则返回true。
- 如果x为-0且y为+0,则返回true。
- 返回false。
- 如果Type(x)是String,则如果x和y完全相同的字符序列(相应位置的长度和字符相同),则返回true;否则,返回false。
- 如果Type(x)是布尔值,如果x和y都为true或两者都为false,则返回true;否则,返回false。
- 如果x和y引用同一个对象,则返回true。否则,返回false。
醇>注意此算法在处理带符号的零和NaN时与SameValue算法(9.12)不同。
...
没有影响。如果我们为两者分配相同的文字,我们可以看到:
b = [1, 2, 3, 4];
c = [1, 2, 3, 4];
b === c; //false
这是因为每个[]
都会创建一个新数组,即使它在其中使用了一个点差。
答案 1 :(得分:1)
c
是一个新的Array
实例,不是同一个对象。
您可以使用.every()
检查索引为b
的每个元素在索引c
处是否具有相同的元素值
let bool = b.every((n, index) => c[index] === n)