第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開發(fā)者教程

ES6-10 入門教程

ES6+ includes()

1. 前言

在字符串中我們學(xué)習(xí)了 includes () 方法,在數(shù)組中同樣存在 includes () 方法,用來查找數(shù)組。includes () 的存在是為了取代 indexOf () 方法而設(shè)計(jì)的, indexOf() 在數(shù)組查找時(shí)存在一定缺陷,對于數(shù)組中元素是 undefined、NaN 時(shí)查找的結(jié)果是有問題的。為了保持語法的一致性和簡潔性 indexOf () 方法也是有必要的,本節(jié)我們就來學(xué)習(xí)數(shù)組中的 includes() 方法。

2. 方法詳解

includes () 方法用于查找一個(gè)數(shù)組中是否包含一個(gè)指定的元素,并返回一個(gè)布爾值,如果包含返回 true 否則返回 false。

使用語法:

arr.includes(valueToFind[, fromIndex])

參數(shù)解釋:

參數(shù) 描述
valueToFind 需要查找的目標(biāo)值
fromIndex (可選)從 fromIndex 索引處開始查找 valueToFind。如果為負(fù)值,則按升序從 array.length + fromIndex 的索引開始搜 (就是從末尾開始往前跳 fromIndex 的絕對值個(gè)索引,然后往后搜尋)。默認(rèn)為 0。

語法實(shí)例:

var arr = ['imooc', 'ES6', 'wiki'];

console.log(arr.includes('ES6'));     // true

和字符串中的 includes() 方法一樣,當(dāng)沒有參數(shù)時(shí),includes() 方法會把第一個(gè)參數(shù)置成 undefined,注意,不同的是這里的 undefined 不是字符串 “undefined”。如下實(shí)例:

[undefined].includes();		// true

['undefined'].includes();	// false

3. indexOf () 的問題

indexOf() 在查詢數(shù)組中元素時(shí)存在一些問題,下面我們就來看看為什么 ES6 要引入 includes() 方法。

在 ES5 中使用 indexOf() 方法在數(shù)組中可以找到一個(gè)給定元素的第一個(gè)索引,如果不存在,則返回 -1。但是查找數(shù)組時(shí)存在一定缺陷,indexOf 不能判斷數(shù)組中是否有 NaN,對于數(shù)組中的空項(xiàng)也不能判斷。

var arr1 = [,,,,,];
var arr2 = [null, undefined, NaN];
console.log(arr1[0], arr1[1])		// undefined undefined
arr1.indexOf(undefined)            // -1
arr2.indexOf(NaN);    // -1

上面的代碼可以看到,在第 1 行中數(shù)組的每一項(xiàng)都是空的, 使用 indexOf() 查找返回的結(jié)果為 -1,沒有查到 undefined 值,但從第 3 行打印的結(jié)果可以看到其實(shí)空數(shù)組的每一項(xiàng)都是 undefined。另外,還有個(gè)問題 indexOf() 不能解決,數(shù)組中有 NaN 時(shí)查詢不了,返回的結(jié)果也是 -1。ES6 的includes() 可以完美解決上面的問題,看如下示例:

[,,,,,].includes(undefined)           // true
[null, undefined, NaN].includes(NaN)]   // true

從上面的代碼可以看出,使用 includes() 查詢可以得到正確的結(jié)果。

indexOf 返回的是數(shù)值型的,而 includes 返回的是布爾型的,方便邏輯判斷。如下實(shí)例:

var arr = ['imooc', 'ES6', 'wiki'];
if (arr.includes('ES6')) {
  // todo
}
if (arr.indexOf('ES6') !== -1) {
  // todo
}

4. 使用場景

4.1 參數(shù)簡介

includes() 方法返回一個(gè)布爾值,表示某個(gè)數(shù)組是否包含給定的值,如果給定的值是 NaN 也是可以判斷的。

[1, 2, 3].includes(2);            // true
[1, 2, 3].includes(4);            // false
[1, 2, NaN].includes(NaN);        // true
[undefined].includes(undefined)   // true

該方法的第二個(gè)參數(shù)表示搜索的起始位置,包括當(dāng)前的位置,如果第二個(gè)參數(shù)大于或等于數(shù)組的長度時(shí),則返回 false。

[1, 2, 3].includes(3, 3);   // false
[1, 2, 3].includes(3, 2);   // true

4.2 第二個(gè)參數(shù)為負(fù)值時(shí)

如果第二個(gè)參數(shù)為負(fù)值時(shí),計(jì)算數(shù)組的長度和第二個(gè)參數(shù)之和小于 0,則整個(gè)數(shù)組都會被搜索。

var arr = ['a', 'b', 'c'];

arr.includes('a', -10);   // true
arr.includes('b', -10);   // true
arr.includes('a', -2);    // false

arr 的數(shù)組長度是 3,第二個(gè)參數(shù)是 - 10,計(jì)算之和為 -7 小于 0,則整個(gè)數(shù)組都會被搜索。

4.3 作為通用方法

我們看到在字符串和數(shù)組中都有 includes() 方法,其有意設(shè)計(jì)為通用方法。它不要求 this 值是數(shù)組對象,所以它可以被用于其他類型的對象 (比如類數(shù)組對象)。下面的例子展示了 在函數(shù)的 arguments 對象上調(diào)用的 includes() 方法。

function fn() {
  console.log([].includes.call(arguments, 'a'));
  console.log([].includes.call(arguments, 'd'));
}
fn('a', 'b', 'c');
// true
// false

上面的代碼中,includes 方法接收 arguments 對象,并且正確地返回相應(yīng)的結(jié)果。

5. 小結(jié)

本節(jié)講解了數(shù)組的 includes() 方法的使用,并對比了 ES5 中的 indexOf() 并回答了為什么 includes() 就是比較好的選擇 ,總結(jié)有以下幾點(diǎn):

  1. includes() 返回的是布爾值更容易做條件判斷;
  2. indexOf() 不能對數(shù)組空項(xiàng)和數(shù)組項(xiàng)為 NaN 的元素進(jìn)行查找,而 includes() 可以很好地解決這個(gè)問題;
  3. includes() 被設(shè)計(jì)為通用方法,可以在類數(shù)組中使用。