例子1: // ES5 的寫法 Math.max.apply(null, [14, 3, 77]) // ES6 的寫法 Math.max(...[14, 3, 77]) // 等同於 Math.max(14, 3, 77); Math.max.call(null,...[14, 3, 77]) 例子2: // ES5的 寫法 var arr1 = [0, 1, 2]; var arr2 = [3, 4, 5]; Array.prototype.push.apply(arr1, arr2); // ES6 的寫法 let arr1 = [0, 1, 2]; let arr2 = [3, 4, 5]; arr1.push(...arr2); // 或者 Array.prototype.push.call(arr1, ...arr2);
// es5 var arr1 = [1,2]; var arr2 = arr1.concat(); //或者,等等方法 var arr2 = arr1.slice(); //es6 //寫法一 let arr2 = [...arr1]; // 寫法二 let [...a2] = a1;
// es5 let arr1 = [1, 2]; let arr2 = [3, 4]; let arr3=arr1.concat(arr2); //es6 let arr3=[...arr1, ...arr2];
// ES5 a = list[0], rest = list.slice(1) // ES6 [a, ...rest] = list
const [...butLast, last] = [1, 2, 3, 4, 5]; // 報錯 const [first, ...middle, last] = [1, 2, 3, 4, 5]; // 報錯
[...'hello'] // [h, e, l, l, o]
let arrayLike = { '0': 'a', '1': 'b', '2': 'c', length: 3 }; // ES5的寫法 var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c'] // ES6的寫法 let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']
*Iterator 接口的數據結構,Array.from都能將其轉爲數組es6
Array.from('zhan') // ['z','h','a','n'] let namesSet = new Set(['a', 'b']) Array.from(namesSet) //['a', 'b']
// arguments對象 function foo() { const args = [...arguments]; } // NodeList對象 [...document.querySelectorAll('div')]
例子一: let spans = document.querySelectorAll('span.name'); // map() let names1 = Array.prototype.map.call(spans, s => s.textContent); // Array.from() let names2 = Array.from(spans, s => s.textContent) 例子二: Array.from({ length: 2 }, () => 'jack') // ['jack', 'jack']
Array.of(1,2,3) // [1,2,3]
// Array傳入不一樣的參數個數,結果不同 Array() // [] Array(3) // [, , ,] Array(3, 11, 8) // [3, 11, 8]
// 從數組的第一個開始替換,截取的替換數據從index爲3開始到結尾,包前不包後 [1, 2, 3, 4, 5].copyWithin(0, 3)
例子一: [1, 4, -5, 10].find((n) => n < 0) 例子二: [1, 5, 10, 15].findIndex(function(value, index, arr) { return value > 9; }) // 2 例子三: function f(v){ return v > this.age; } let person = {name: 'John', age: 20}; [10, 12, 26, 15].find(f, person);
['a','b','c'].fill(10) // [10,10,10] ['a','b','c'].fill(10,1,2) // ['a',10,'c'] ['a','b','c'].fill(10,1) // ['a',10,10]
for (let index of ['a', 'b'].keys()) { console.log(index); } // 0 // 1 for (let elem of ['a', 'b'].values()) { console.log(elem); } // 'a' // 'b' for (let [index, elem] of ['a', 'b'].entries()) { console.log(index, elem); } // 0 "a" // 1 "b
[1, 2, 3].includes(2) // true [1, 2, 3].includes(4) // false [1, 2, NaN].includes(NaN) [1, 2, 3].includes(2,2) // false [NaN].indexOf(NaN) // -1
[1, 2, [3, 4]].flat() // [1,2,3,4] [1, 2, [3, [4, 5]]].flat(2) //[1,2,3,4,5] //若是無論有多少層嵌套,都要轉成一維數組,能夠用Infinity關鍵字做爲參數 [1, [2, [3]]].flat(Infinity) // [1,2,3] //flatMap [2, 3, 4].flatMap((x) => [x, x * 2]) //[2,4,3,6,4,8]
Array(3) // [, , ,]
0 in [undefined, undefined, undefined] // true 0 in [, , ,] // false