1嘴瓤、Array.prototype.includes()方法
includes() 方法用來(lái)判斷一個(gè)數(shù)組是否包含一個(gè)指定的值,根據(jù)情況益眉,如果包含則返回 true,否則返回false。
var array = [1, 2, 3];
console.log(array.includes(2));
// expected output: true
var pets = ['cat', 'dog', 'bat'];
console.log(pets.includes('cat'));
// expected output: true
console.log(pets.includes('at'));
// expected output: false
Array.prototype.includes()方法接收兩個(gè)參數(shù):
要搜索的值
搜索的開(kāi)始索引绑嘹。
當(dāng)?shù)诙€(gè)參數(shù)被傳入時(shí),該方法會(huì)從索引處開(kāi)始往后搜索(默認(rèn)索引值為0)疾呻。若搜索值在數(shù)組中存在則返回true,否則返回false写半。 且看下面示例:
['a', 'b', 'c', 'd'].includes('b') // true
['a', 'b', 'c', 'd'].includes('b', 1) // true
['a', 'b', 'c', 'd'].includes('b', 2) // false
乍一看岸蜗,includes的作用跟數(shù)組的indexOf重疊,為什么要特意增加這么一個(gè)api呢叠蝇?主要區(qū)別有以下幾點(diǎn):
1璃岳、返回值』诖罚看一個(gè)函數(shù)铃慷,先看他們的返回值。indexOf的返回?cái)?shù)是值型的蜕该,includes的返回值是布爾型犁柜,所以在if條件判斷的時(shí)候includes要簡(jiǎn)單得多,而indexOf 需要多寫(xiě)一個(gè)條件進(jìn)行判斷堂淡。
var ary = [1];
if (ary.indexOf(1) !== -1) {
console.log("數(shù)組存在1")
}
if (ary.includes(1)) {
console.log("數(shù)組存在1")
}
2馋缅、NaN的判斷。如果數(shù)組中有NaN绢淀,你又正好需要判斷數(shù)組是否有存在NaN萤悴,這時(shí)你使用indexOf是無(wú)法判斷的,你必須使用includes這個(gè)方法皆的。
var ary1 = [NaN];
console.log(ary1.indexOf(NaN))//-1
console.log(ary1.includes(NaN))//true
3覆履、當(dāng)數(shù)組的有空的值的時(shí)候,includes會(huì)認(rèn)為空的值是undefined祭务,而indexOf不會(huì)内狗。
var ary1 = new Array(3);
console.log(ary1.indexOf(undefined));//-1
console.log(ary1.includes(undefined))//true
2、求冪運(yùn)算符(**)
加/減法我們通常都是用其中綴形式义锥,直觀易懂柳沙。在ECMAScript2016中,我們可以使用**來(lái)替代Math.pow拌倍。
4 ** 3 // 64
效果等同于
Math.pow(4,3)
值得一提的是赂鲤,作為中綴運(yùn)算符,**還支持以下操作
let n = 4;
n **= 3;
// 64
3柱恤、Object.values and Object.entries
Object.values() 方法返回一個(gè)給定對(duì)象自己的所有可枚舉屬性值的數(shù)組数初,值的順序與使用for...in循環(huán)的順序相同 ( 區(qū)別在于for-in循環(huán)枚舉原型鏈中的屬性 )。
obj參數(shù)是需要待操作的對(duì)象梗顺∨莺ⅲ可以是一個(gè)對(duì)象,或者一個(gè)數(shù)組(是一個(gè)帶有數(shù)字下標(biāo)的對(duì)象寺谤,[10,20,30] -> {0: 10,1: 20,2: 30})仑鸥。
const obj = { x: 'xxx', y: 1 };
Object.values(obj); // ['xxx', 1]
const obj = ['e', 's', '8']; // 相當(dāng)于 { 0: 'e', 1: 's', 2: '8' };
Object.values(obj); // ['e', 's', '8']
// 當(dāng)我們使用數(shù)字鍵值時(shí)吮播,返回的是數(shù)字排序
// 根據(jù)鍵值排序
const obj = { 10: 'xxx', 1: 'yyy', 3: 'zzz' };
Object.values(obj); // ['yyy', 'zzz', 'xxx']
Object.values('es8'); // ['e', 's', '8']
Object.entries 方法返回一個(gè)給定對(duì)象自身可遍歷屬性 [key, value] 的數(shù)組, 排序規(guī)則和 Object.values 一樣眼俊。這個(gè)方法的聲明比較瑣碎:
const obj = { x: 'xxx', y: 1 };
Object.entries(obj); // [['x', 'xxx'], ['y', 1]]
const obj = ['e', 's', '8'];
Object.entries(obj); // [['0', 'e'], ['1', 's'], ['2', '8']]
const obj = { 10: 'xxx', 1: 'yyy', 3: 'zzz' };
Object.entries(obj); // [['1', 'yyy'], ['3', 'zzz'], ['10': 'xxx']]
Object.entries('es8'); // [['0', 'e'], ['1', 's'], ['2', '8']]
4意狠、String padding
為 String 對(duì)象增加了 2 個(gè)函數(shù):padStart 和 padEnd。
像它們名字那樣疮胖,這幾個(gè)函數(shù)的主要目的就是填補(bǔ)字符串的首部和尾部环戈,為了使得到的結(jié)果字符串的長(zhǎng)度能達(dá)到給定的長(zhǎng)度。你可以通過(guò)特定的字符澎灸,或者字符串院塞,或者默認(rèn)的空格填充它。下面是函數(shù)的聲明:
str.padStart(targetLength [, padString])
str.padEnd(targetLength [, padString])
這些函數(shù)的第一個(gè)參數(shù)是 targetLength(目標(biāo)長(zhǎng)度)击孩,這個(gè)是結(jié)果字符串的長(zhǎng)度迫悠。第二個(gè)參數(shù)是可選的 padString(填充字符)鹏漆,一個(gè)用于填充到源字符串的字符串巩梢。默認(rèn)值是空格。
'es8'.padStart(2); // 'es8'
'es8'.padStart(5); // ' es8'
'es8'.padStart(6, 'woof'); // 'wooes8'
'es8'.padStart(14, 'wow'); // 'wowwowwowwoes8'
'es8'.padStart(7, '0'); // '0000es8'
'es8'.padEnd(2); // 'es8'
'es8'.padEnd(5); // 'es8 '
'es8'.padEnd(6, 'woof'); // 'es8woo'
'es8'.padEnd(14, 'wow'); // 'es8wowwowwowwo'
'es8'.padEnd(7, '6'); // 'es86666'