1. array.from()
1) array.from方法用於將兩類物件轉為真正的陣列:類似陣列的物件(array-like object)和可遍歷(iterable)的對gtyamcaa象(包括es6新增的資料結構set和map,他們都部署了iterator介面,字串也是)。
let arraylike = ;
// es5的寫法
var arr1 = .slice.call(arraylike);
console.log(arr1) // ['a', 'b', 'c']
// es6的寫法
let arr2 = array.from(arraylike);
console.log(arr2) // ['a', 'b', 'c']
array.from('hello')// ['h', 'e', 'l', 'l', 'o']
let namesset = new set(['a', 'b'])
array.from(namesset) // ['a', 'b']
2) 擴充套件運算子(...)背後呼叫的是遍歷器介面(symbol.iterator),如果乙個物件沒有部署這個介面,就無法轉換。array.from方法則是還支援類似陣列的物件。所謂類似陣列的物件,本質特徵只有一點,即必須有length屬性。
array.from();擴充套件運算子就轉換不了
// [ undefined, undefined, undefined ]
3) array.from還可以接受第二個引數,作用類似於陣列的map方法,用來對每個元素進行處理,將處理後的值放入返回的陣列。
var a = array.from([1, 2, 3], x => x * x);
console.log(a)
// 等同於
var a1 = array.from([1, 2, 3]).map(x => x * x);
console.log(a1)
var a2 = array.from([1, 2, 3], (x) => x * x)
console.log(a2)// [1, 4, 9]
//只要有乙個原始的資料結構,你就可以先對它的值進行處理,
// 然後轉成規範的陣列結構,進而就可以使用數量眾多的陣列方法。
var a3 = array.from(, () => 'jack')
console.log(a3)// ['jack', 'jack']
2. array.of()
返回引數值組成的陣列。如果沒有引數,就返回乙個空陣列,彌補陣列建構函式array()的不足。因為引數個數的不同,會導致array()的行為有差異。
console.log(array()) //
console.log(array(3)) // [, , ,]
console.log(array(3, 11, 8)) // [3, 11, 8]
console.log(array.of(3, 11, 8))// [3,11,8]
console.log(array.of(3)) // [3]
console.log(array.of()) //
3. 陣列例項的find() 和 findindex()
① 陣列例項的find方法,用於找出第乙個符合條件的陣列成員。它的引數是乙個**函式,所有陣列成員依次執行該**函式,直到找出第乙個返回值為true的成員,然後返回該成員。如果沒有符合條件的成員,則返回undefined
var a = [1, 4, -5, 10].find((n) => n < 0)
console.log(a)
//find方法的**函式可以接受三個引數,依次為當前的值、當前的位置和原陣列。
[1, 5, 10, 15].find(function(value, index, arr) ) // 10
② 陣列例項的findindex方法的用法與find方法非常類似,返回第乙個符合條件的陣列成員的位置,如果所有成員都不符合條件,則返回-1。
[1, 5, 10, 15].findindex(function(value, index, arr) ) // 2
4. 陣列例項的fill()
fill方法使用給定值,填充乙個陣列。陣列中已有的元素,會被全部抹去。
['a', 'b', 'c'].fill(7) // [7, 7, 7]
new array(3).fill(7) // [7, 7, 7]
fill方法還可以接受第二個程式設計客棧和第三個引數,用於指定填充的起始位置和結束位置(包左不包右)。
['a', 'b', 'c'].fill(7, 1, 2)
// ['a', 7, 'c']
5. 陣列例項的 entries() 、keys() 和values()
es6提供三個新的方法——entries(),keys()和values()——用於遍歷陣列。它們都返回乙個遍歷器物件. for...of 會自動的呼叫遍歷器的next().
for (let index of ['a', 'b'].keys())
// 0
// 1
for (let elem of ['a', 'b'].values())
// 'a'
// 'b'
for (let [index, elem] of ['a', 'b'].entries())
// 0 "a"
// 1 "b"
如果不使用for...of迴圈,可以手動呼叫遍歷器物件的next方法,進行遍歷。
let letter = ['a', 'b', 'c'];
let entries = letter.entries();
console.log(entries.next().value); // [0, 'a']
console.log(entries.next().value); // [1, 'b']
console.log(entries.next().value); // [2, 'c']
6. 陣列例項的includes()
array.prototype.includes方法返回乙個布林值,表示某個陣列是否包含給定的值。該方法的第二個引數表示搜尋的起始位置,預設為0。如果第二個引數為負數,則表示倒數的位置。
程式設計客棧[1, 2, 3].includes(2); // true
[1, 2, 3].includes(4); // false
[1, 2, nan].includes(nan); // true
另外,map和set資料結構有乙個has方法,需要注意與includes區分。
map結構的has方法,是用來查詢鍵名的:
比如map.prototype.has(key)、weakmap.prototype.has(key)、reflect.has(target, propertykey)。
set結構的has方法,是用來查詢值的:
比如set.prototype.has(value)、weakset.prototype.has(value)。
7. 陣列的空位
陣列的空位指,陣列的某乙個位置沒有任何值。空位不是undefined,乙個位置的值等於undefined,依然是有值的。
array(3) // [, , ,]
es6則是明確將空位轉為undefined。
console.log(array.from(['a',,'b']))//[ 'a', undefined, 'b' ]
console.log([...['a',,'b']])// [ "a", undefined, "b" ]
let arr = [, 'a',,];
for (let i of arr) //undefined a undefined
// entries()
[...[,'a'].entries()] // [[0,undefined], [1,"a"]]
// keys()
[...[,'a'].keys()] // [0,1]
// values()
[...[,'a'].values()] // [undefined,"a"]
// find()
[,'a'].find(x => true) // undefined
// findindex()
[,'a'].findindex(x => true) // 0
本文位址: http:/ruanjian/j**a/188289.html
ES6新特性詳解
let 和const都是塊級作用域,並且都不會有變數提公升 const宣告的變數都會被認為是常量,不能被修改,但如果被const修飾的是物件,物件中的屬性值可以被修改 看一道簡單的題目 var funcs for var i 0 i 5 i funcs.foreach function func 輸...
es6新特性 ES6新特性(一)
var 1 var宣告的是函式作用域 區域性 但在if for等定義的變數是全域性的 2 var 具有變數提公升,預解析 3 在同乙個作用域下,var可以宣告多次 4 var 宣告的變數會掛載到window上 let1 let不存在變數提公升,在變數使用之前,必須要先宣告 2 let在同一作用域下,...
ES6的新特性
一 let,const與var的區別 1 let,const 不存在變數提公升。2 let,const 在同乙個作用域下不能重複定義相同的變數名稱。3 let,const 有嚴格的作用域,塊級作用域。var 則是函式作用域。4 const 宣告乙個唯讀的常量,一旦定義,常量的值不能改變。5 cons...