为什么没有数组=== array.toString().split(",")

Nic*_*lai 2 javascript

这有点类似于javascript中的split(),但这是我的问题,它更具理论性而非实际性

我有一个看起来像这样的数组:

var array = ["abc", "def"]
Run Code Online (Sandbox Code Playgroud)

当我做

debug(array === array.toString().split(","));
Run Code Online (Sandbox Code Playgroud)

我弄错了,我试过==这也是假的.我做了一个数组的调试转储和连接/拆分数组,它们在输出中看起来完全相同.它们之间有什么区别导致这个评估为假?

我认为我的代码非常清楚,我可以使用数组而不需要使用toString.split(我认为这是必要的,不再了),我只是好奇这里发生了什么.

Nie*_*sol 5

因为array.toString().split(",")返回一个新的数组实例.作为对象的数组只有在它们是数组的完全相同的实例时才相等:

var a = [1,2];
var b = [1,2];
var c = a;
alert(a == c); // true
alert(a == b); // false - not even loose comparison can save you
Run Code Online (Sandbox Code Playgroud)


p.s*_*w.g 5

无论是==也不是===操作者将检查阵列的内容.相反,它们测试两个操作数是否在内存中引用相同的数组实例.注意:

['a', 'b'] === ['a', 'b']; // false

var arr = ['a', 'b'];
arr === arr;               // true
Run Code Online (Sandbox Code Playgroud)

换句话说,当你比较两个不同的阵列,=====永远返回false;