今天在看廖雪峯大神的博客意外地發現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
以上就是個人總結,有不對的地方請指出。對象