今天在看廖雪峰大神的博客意外地发现javascript是不能用 '=='或'==='操做符直接比较两个数组是否相等的。javascript
先看案例:java
var a = [1,2,3,4,5]; var b = a.slice(); console.log(a); // [1,2,3,4,5] console.log(b); // [1,2,3,4,5] console.log(a === b); // false console.log(a == b); // false console.log([] == []); // false console.log( [] === []); // false
常见的基本数据类型:Number、String 、Boolean、Null和Undefined。数组
var a = 10; var b = a; b = 20; console.log(a); // 10
上面b获取的是a值的一份拷贝,虽然两个变量的值相等,可是两个变量保存了两个不一样的基本数据类型值。b只是保存了a赋值的一个副本,因此,b的改变,对a没有影响。调试
讲到这里应该理解为何输出的是false了:由于数组是兑现,==或===操做符只能比较两个对象是不是同一个实例,也就是是不是同一个对象引用。目前JavaScript没有内置的操做符判断对象的内容是否相同。code
function equar(a, b) { // 判断数组的长度 if (a.length !== b.length) { return false } else { // 循环遍历数组的值进行比较 for (let i = 0; i < a.length; i++) { if (a[i] !== b[i]) { return false } } return true; } } var s = equar([1, '2', 3], [1, 2, 3]); var t = equar([1, 2, 3], [1, 2, 3]); console.log(s); // false console.log(t); // true
以上就是个人总结,有不对的地方请指出。对象