简介
includes()
和 indexOf()
是 JavaScript 中用于在数组或字符串中查找特定元素的方法。以下是它们的用法和区别:
includes()
-
用法:
array.includes(searchElement[, fromIndex]) string.includes(searchString[, position])
-
返回值:布尔值。如果在数组或字符串中找到了指定的元素或子字符串,返回
true
,否则返回false
。 -
参数:
-
searchElement
(数组)或searchString
(字符串):要查找的元素或子字符串。 -
fromIndex
(可选,数组):开始搜索的索引位置,默认为 0。 -
position
(可选,字符串):开始搜索的字符位置,默认为 0。
-
-
indexOf()
-
用法:
array.indexOf(searchElement[, fromIndex]) string.indexOf(searchValue[, fromIndex]) // 快捷判断方法 if(!~array.indexOf(0)){ // 不存在时的操作 }
-
返回值:整数。如果在数组或字符串中找到了指定的元素或子字符串,返回它第一次出现的索引位置,否则返回
-1
。 -
参数:
-
searchElement
(数组)或searchValue
(字符串):要查找的元素或子字符串。 -
fromIndex
(可选,数组和字符串):开始搜索的索引位置,默认为 0。
-
区别
-
includes()
方法返回的是布尔值,表示是否找到指定的元素或子字符串,而indexOf()
方法返回的是找到的元素或子字符串的索引位置,或者-1
表示未找到。 -
indexOf()
在查找NaN
时可能会出现问题,因为NaN
不等于自身,所以使用array.indexOf(NaN)
可能无法正确判断数组中是否存在NaN
。而includes()
方法可以正确判断数组中是否包含NaN
。
以下是一些示例:
let arr = [1, 2, 3, NaN, 5];
let str = 'Hello, world!';
console.log(arr.includes(3)); // true
console.log(arr.includes(NaN)); // true
console.log(str.includes('world')); // true
console.log(arr.indexOf(3)); // 2
console.log(arr.indexOf(NaN)); // -1 (这里无法正确判断)
console.log(str.indexOf('world')); // 7
对于稀疏数组处理
indexOf()
和 includes()
方法在处理稀疏数组时的行为是相同的。
稀疏数组是指数组中包含未定义或空的元素,即不是一个连续的元素序列。例如:
// 稀疏数组,索引 0、1、3 上的元素未定义
let sparseArray = [, , 3, , 5];
当在稀疏数组中使用 indexOf()
或 includes()
查找元素时:
- 如果查找的元素存在于数组中(即使是在未定义的索引位置),这两个方法都会返回该元素的索引。
- 如果查找的元素不存在于数组中,这两个方法都会返回
-1
(对于indexOf()
)或false
(对于includes()
)。
以下是一个示例:
let sparseArray = [, , 3, , 5];
console.log(sparseArray.indexOf(3)); // 2
console.log(sparseArray.includes(3)); // true
console.log(sparseArray.indexOf(1)); // -1
console.log(sparseArray.includes(1)); // false
console.log(sparseArray.indexOf(undefined)); // -1
console.log(sparseArray.includes(undefined)); // false
在这个示例中,尽管数组是稀疏的,但 indexOf()
和 includes()
方法都能够正确地查找和判断元素的存在与否。需要注意的是,查找 undefined
会返回 -1
或 false
,因为这并不表示数组中未定义的元素,而是表示数组中没有 undefined
这个值。如果你想检查数组中是否存在未定义的元素,你需要使用其他方法,如遍历数组并检查元素是否为 undefined
。
网友评论