天天看點

js踩坑記錄-數組

數組比較

eg1:

js踩坑記錄-數組

以為列印出的是true,但是是false,原因是數組是引用資料類型,比較的時候比較的是位址,是以是不相等的。在C++中,數組也是不能通過這種方式比較的。

但是python是可以的。

那要如何進行數組比較呢?

如果是比較全數組,可以轉化為字元串進行比較:

JSON.stringify(array1) === JSON.stringify(array2)      

或者周遊數組比較。

周遊數組

方法一:for 下标通路

for (let i = 0; i < arr.length; ++i) {
    console.log(arr[i]);
}      

方法二: for in

for (let i in arr) {
    console.log(arr[i]);
}      

這裡注意與python的in不一樣,python中

for i in arr:
    print(i)      

這個疊代器指的是數組的值,而不是索引。

方法三:of 直接通路值

for (const v of arr) {
    console.log(v);
}      

方法四:forEach 同時通路值與索引

arr.forEach((v, i) => console.log(v));      

非數字屬性

JavaScript 的數組就是 Object,這就意味着我們可以給數組添加字元串屬性:

舉例如下:

js踩坑記錄-數組

上面的循環文法,隻有for/in不會忽略非數字屬性。

數組的空元素

JavaScript 數組可以有空元素

如下:

js踩坑記錄-數組

數組的長度是4。

添加空元素

array[5] = "a";      
js踩坑記錄-數組

對于數組裡的空元素來說,周遊方式也是有差別的。

eg:

for (let i = 0; i < array.length; i++) {
    console.log(array[i]);
}      
js踩坑記錄-數組
// 列印1 2 3
array.forEach(v => console.log(v));

// 列印1  2  3
for (let i in array) {
    console.log(array[i]);
}

// 列印1 undefined 2  3
for (const v of array) {
    console.log(v);
}      
  1. 對于[1, 2,3],for/in與forEach會跳過空元素,而for與for/of則不會跳過
  2. 對于[‘a’, undefined, ‘c’],4 種循環文法一緻,列印的都是”a, undefined, c”