es6數組的擴展
- 擴展運算符
擴展運算符是對具有Iterator 接口的對象,都可以使用擴展運算符
- Array.from()
用於將兩類對象轉化為真正的數組 1.類似數組的對象(只要據有length屬性, 都可以被轉化為數組) 2.可遍歷(iterable)的對象
- Array.of()
將一組值轉化為數組
- find和findIndex
find方法,用於找出第一個符合條件的數組成員,沒有找到會返回undefiend,findIndex方法返回的是第一個符合條件成員的位置, 如果找不到返回-1, find和findIndex都可以接受第二個參數,用來綁定回調函數的this
- 數組實例的fill()
fill方法使用給定值,填充一個數組。用於初始化數組值,接受第二個和第三個參數,用於指定開始和結束位置
- 數組實例的方法entries() keys()和values()
這三個方法提供新的方法,用於遍歷數組, 都返回一個遍歷器對象,可以用for..of循環進行遍歷 keys是對鍵名的遍歷,values是對鍵值的遍歷 entries是對鍵值對的遍歷
- 數組實例的includes()
表示某個數組是否包含給定的值, 返回true,否則返回false
Object對象的新增方法
- 屬性的簡潔表示
es6允許直接寫入變量和函數,最為對象的屬性和方法 主要使用: 1.函數返回值, 2. module.exports導出 3. 屬性的setter和getter
var obj = { foo, // 屬性 methods() { // 方法 } }
- 屬性的遍歷
es6一共5種方法可以遍歷對象的屬性
- for..in: 循環遍歷對象自身和繼承的可枚舉變量 (不含Symbol屬性)
- Object.keys(obj): 返回一個數組,包含對象自身所有可枚舉屬性的鍵名
- Object.getOwnPropertyNames(obj): 返回一個數組,包含對象自身的所有屬性的鍵名
- Object.getOwnPropertySymbols(obj): 返回一個數組,包含自身所有的symbol屬性的鍵名
- Reflect.ownKeys(): 返回一個數組,包含對象自身的所有鍵名,不管鍵名是 Symbol 或字符串,也不管是否可枚舉
- super關鍵字
js中this的關鍵字總是指向函數所在的當前對象,es6新增了另一個類似的關鍵字super,指向當前對象的原型對象,super只能用在對象的方法中,而且是方法的簡寫屬性
const proto = { foo: 'hello' } const obj = { foo: 'world', find() { return super.foo // 訪問obj的原型屬性的foo屬性 } } Object.setPrototypeOf(obj, proto) // 設置obj的原型為proto obj.find() // 'hello'
- 對象的新增方法
同值相等的算法, 用來比較兩個值嚴格相等
Object.is('foo', 'foo') // true Object.is({}, {}) // false
- Object.assign(target, source)
對象的合並,將原對象所有的可枚舉屬性,復制到目標對象上
- 常見用途
- 為對象添加屬性
class point { constructor (x, y) { Object.assign(this, {x, y}) // 將屬性x和y添加Point類的對象實例上 } }
- 為對象添加方法
Object.assign(SomeClass.prototype, { // 為對象原型上添加方法 someMethod(arg1, arg2){} antherMethod() {} })
- 克隆對象
function clone(origin) { return Object.assign({}, origin) } function clone(origin) { let originProto = Object.getPrototypeOf(origin); return Object.assign(Object.create(originProto), origin); }
- 合並多個對象
const merge = (target, ...sources) => Object.assign(target, ...sources)
- __proto__屬性,Object.setPrototypeOf() Object.getPrototypeOf()
js語言對象繼承是通過原型鏈實現的,ES6提供了更多的原型鏈方法 __proto__屬性,Object.getPrototypeOf() 獲取原型prototype屬性 Object.setPrototypeOf(obj, proto), Object.create() 設置原型屬性
- Object.keys() Object.Values() Object.entries()
返回對象屬性組成的數組