今天意外地发现JavaScript是不能用==或===操做符直接比较两个数组是否相等的。javascript
alert([]==[]); // false alert([]===[]); // false
以上两句代码都会弹出false。java
由于JavaScript里面Array是对象,==或===操做符只能比较两个对象是不是同一个实例,也就是是不是同一个对象引用。目前JavaScript没有内置的操做符判断对象的内容是否相同,而判断两个字符串相等是能够的。数组
可是惯性思惟让人觉得数组也是值,是能够比较的。spa
若是要比较数组是否相等,就只能遍历数组元素比较。调试
在网上流传很广泛的一种作法是将数组转换成字符串:code
1
|
JSON.stringify(a1) == JSON.stringify(a2)
|
或对象
1
|
a1.toString() == a2.toString()
|
请不要使用这种方法。blog
这种方法在某些状况下是可行的,当两个数组的元素顺序相同且元素均可以转换成字符串的状况下确实可行,可是这样的代码存有隐患,好比数字被转换成字符串,数字“1”和字符串“1”会被认为相等,可能形成调试困难,不推荐使用。ip
因此,为了保险起见ci