數組比較
eg1:
以為列印出的是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,這就意味着我們可以給數組添加字元串屬性:
舉例如下:
上面的循環文法,隻有for/in不會忽略非數字屬性。
數組的空元素
JavaScript 數組可以有空元素
如下:
數組的長度是4。
添加空元素
array[5] = "a";
對于數組裡的空元素來說,周遊方式也是有差別的。
eg:
for (let i = 0; i < array.length; i++) {
console.log(array[i]);
}
// 列印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, 2,3],for/in與forEach會跳過空元素,而for與for/of則不會跳過
- 對于[‘a’, undefined, ‘c’],4 種循環文法一緻,列印的都是”a, undefined, c”