ES7 新特性
- Array.prototype.includes()方法來判斷一個(gè)數(shù)組是否包含一個(gè)指定的值聘惦,根據(jù)情況制市,如果包含則返回true示损,否則返回false朗和。
在 es7 之前有兩種方式 判斷一個(gè)數(shù)組中是否包含某個(gè)元素代碼如下:
第一種方式: indexof()
var arr = [1, 2, 3, 18, 20];
for(var=i; i<arr.length;i++){
if(arr.indexof(i)===-1){
等于-1 就是存在
}
}
注意:(這個(gè)方式有一個(gè)缺點(diǎn)就是導(dǎo)致對(duì) NaN的誤判)
第二種方式:
find() 遍歷返回第一個(gè)符合條件的數(shù)組成員的元素和 findIndex() 遍歷返回第一個(gè)符合條件的數(shù)組成員的下標(biāo)
var arr = [1, 2, 3, 100, 101, 102];
var newarr = arr.find((item, index) => {
return item > 50;
});
console.log(newarr); // 返回第一個(gè)符合條件的數(shù)組元素
var arr = [1, 2, 3, 100, 101, 102];
var newarr = arr.findIndex((item, index) => {
return item > 50;
});
console.log(newarr); // 返回第一個(gè)符合條件的數(shù)組元素的下標(biāo)
ES7新特性 arr.includes() 找到數(shù)組中是否包含某一項(xiàng) ,返回的是布爾值
var arr = [1,2,3,4,5];
console.log(arr.includes(1)) true
es7 求冪運(yùn)算符:
console.log(Math.pow(2, 10)) // 輸出1024
Object.values方法返回一個(gè)數(shù)組馁痴,成員是參數(shù)對(duì)象 key value當(dāng)中的value,組成的是一個(gè)數(shù)組自身的(不含繼承的)所有可遍歷(enumerable)屬性的鍵值脚线。
var obj = { a: "吃飯", b: "睡覺", c: "打豆豆~" };
var arr = Object.values(obj);
console.log(arr); 結(jié)果: ["吃飯", "睡覺", "打豆豆~"]
Object.entries()方法返回一個(gè)數(shù)組,成員是參數(shù)對(duì)象自身的(不含繼承的)所有可遍歷(enumerable)屬性的鍵值對(duì)數(shù)組弥搞。這個(gè)特性我們后面介紹ES10的Object.fromEntries()還會(huì)再提到邮绿。
var obj = { a: "吃飯", b: "睡覺", c: "打豆豆~" };
var arr = Object.entries(obj);
console.log(arr); // 結(jié)果
[
[a, "吃飯"],
[b, "睡覺"],
[c, "打豆豆~"]
];
ES8 引入了 Object.getOwnPropertyDescriptors() 返回指定對(duì)象所有自身屬性(非繼承屬性)的描述對(duì)象。
ES5的Object.getOwnPropertyDescriptor()方法會(huì)返回某個(gè)對(duì)象屬性的描述對(duì)象
const obj = {
name: '浪里行舟',
get bar () {
return 'abc'
}
}
console.log(Object.getOwnPropertyDescriptors(obj))
該方法的引入目的攀例,主要是為了解決Object.assign()無法正確拷貝get屬性和set屬性的問題船逮。
const source = {
set foo (value) {
console.log(value)
},
get bar () {
return '浪里行舟'
}
}
const target2 = {}
Object.defineProperties(target2, Object.getOwnPropertyDescriptors(source))
console.log(Object.getOwnPropertyDescriptor(target2, 'foo'))
ES9新特性 for await of
for of 能夠遍歷Symbol.iterator的同步迭代數(shù)據(jù),但是不能遍歷Symbol.iterator異步迭代數(shù)據(jù)
ES9 新增的 for await of 可以用來處理異步的迭代數(shù)據(jù)
// for await of遍歷
function Gen (time) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
resolve(time)
}, time)
})
}
async function test () {
let arr = [Gen(2000), Gen(100), Gen(3000)]
for await (let item of arr) {
console.log(Date.now(), item.then(console.log))
}
}
test()
//結(jié)果:
// 1575536194608 2000
// 1575536194608 100
// 1575536195608 3000
擴(kuò)展運(yùn)算符的使用 ...
var obj = {
a: "吃飯",
b: "睡覺",
c: "打豆豆~"
};
var ipt = {
...obj,
d: "看電影"
};
console.log(ipt);
剩余運(yùn)算符的使用 ...rest
var obj = {
a: "吃飯",
b: "睡覺",
c: "打豆豆~"
};
var { a, ...rest } = obj;
console.log(a, rest); // 結(jié)果: 吃飯 {b: "睡覺", c: "打豆豆~"}b: "睡覺"c: "打豆豆~"
Array.prototype.flat()
將多維數(shù)組轉(zhuǎn)為一維數(shù)組
flat() 默認(rèn)值是1 ,意思將二維數(shù)組轉(zhuǎn)為一維數(shù)組
當(dāng)flat() 是2,意思將三維數(shù)組轉(zhuǎn)為一維數(shù)組
將二維數(shù)組轉(zhuǎn)為一維數(shù)組
var arr = [1, 2, 3, [4, 5, 6,]];
var arr1 = arr.flat(1);
console.log(arr1);
將三維數(shù)組轉(zhuǎn)為一維數(shù)組
var arr = [1, 2, 3, [4, 5, 6, [7, 8, 9]]];
var arr1 = arr.flat(2);
console.log(arr1);