一日客語:中文:加油 客語:gaˊ iuˇ 嘎2聲U
Array:是物件只是做了小調整變成陣列
特性:
1.新元素加入,他的length會改變
2.length設小於原陣列長度會截斷陣列
3.陣列是從Array.prototype
回傳true
/false
是陣列回傳true
不是陣列回傳false
const a = [0];
a.length = 10;
console.log(a);//[ 0, <9 empty items> ]
length設定
長度大於原本陣列,陣列裡產生empty item,但要注意empty item是沒有index,使用陣列要盡量避免產生empty item,這元素是不可以迭代的,了解原因要先知道forEach() 和map()
Array.prototype.map() 和 Array.prototype.forEach()
會將陣列內的元素,作為參數帶入callback function,每個元素各執行一次function
forEach()和map()不同地方在於回傳值
forEach():undefined
map():回傳array,此array會是每一個元素經由callback function運算後所回傳的結果之集合
注意:陣列index沒有元素時(未被設定的索引:已被刪除或從未被賦值)並不會呼叫callback function。
a.map((element) => console.log(element));
(其他篇在詳細介紹他們)
有設index的元素,在forEach/map才會被印出來
let a = [10];
a.length = 10;
a.map((element) => console.log(element));//10
a.forEach((element) => console.log(element));//10
心中會疑惑
取值empty item值,印出結果不是 empty item 而是undefined,why??
let a = [10];
a.length = 10;
console.log(a); //[ 10, <9 empty items> ]
console.log(a[2]); //undefined
根據array的原型鏈
圖片來自:原生的原型
建立array
array[[Prototype]]會是Array.prototype
Array的[[prototype]]會是Object.prototype
a= [1,2,3] -> Array(3) ->Object
可以想像成是
a = {
0: 1,
1: 2,
2: 3,
length: 3,
};
當使用length增加array長度
let a = [10];
a.length = 3;
console.log(a);
[ 10, <2 empty items> ]
會像是
const a = {
0: 10,
length: 3,
}
所以使用陣列取值a[1]會像是物件取元素
console.log(a[1]); //undefined
陣列元素是undefined呢???
const b = [undefined, undefined, 10];
console.log(b);
console.log(b[0]);//undefined
想像成
const b = {
0: undefined,
1: undefined,
2: 10,
};
使用map、forEach
const b = [undefined, undefined, 10];
b.map((element) => {
console.log(element);
});
//undefined
//undefined
//10
b.forEach((element) => {
console.log(element);
});
//undefined
//undefined
//10
所以forEach/map 之所以不會印出undefined可能是因為沒有key值,所以迭代不到
原生的原型
Difference between "empty' and "undefined" in Javascript?
mdn
JavaScript大全
忍者開發技巧探秘第二版
謝謝 Array Leeder 同學
感謝追根究底的Wendy,你找的stackoverflow那篇讚讚
都是Leeder教的,我也長知識了