这有点类似于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(我认为这是必要的,不再了),我只是好奇这里发生了什么.
因为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)
无论是==也不是===操作者将检查阵列的内容.相反,它们测试两个操作数是否在内存中引用相同的数组实例.注意:
['a', 'b'] === ['a', 'b']; // false
var arr = ['a', 'b'];
arr === arr; // true
Run Code Online (Sandbox Code Playgroud)
换句话说,当你比较两个不同的阵列,==或===将永远返回false;