返回

深入剖析JavaScript中的includes()和indexOf()

前端

1. 基本区别

includes()和indexOf()都是用来检查数组是否包含某些元素,但它们在返回值和处理特殊情况方面存在一些关键区别。

  • 返回值:

    • includes():如果数组包含指定元素,则返回true;否则,返回false。
    • indexOf():如果数组包含指定元素,则返回该元素在数组中的索引;如果数组不包含指定元素,则返回-1。
  • 处理特殊情况:

    • NaN:
      • includes():如果数组包含NaN,则返回true。
      • indexOf():如果数组包含NaN,则返回-1。
    • undefined:
      • includes():如果数组包含undefined,则返回false。
      • indexOf():如果数组包含undefined,则返回-1。
  • 比较NAN和undefined:

    • NaN: NaN是一个特殊值,它既不等于自身,也不等于任何其他值,包括NaN。
    • undefined: undefined是一个特殊值,它表示变量或属性尚未赋值。

2. 示例

// 创建一个数组
const arr = [1, 2, 3, 4, 5];

// 使用includes()检查数组是否包含数字3
const result = arr.includes(3);
console.log(result); // 输出:true

// 使用indexOf()检查数组中数字3的索引
const index = arr.indexOf(3);
console.log(index); // 输出:2

// 使用includes()检查数组是否包含字符串"apple"
const result2 = arr.includes("apple");
console.log(result2); // 输出:false

// 使用indexOf()检查数组中字符串"apple"的索引
const index2 = arr.indexOf("apple");
console.log(index2); // 输出:-1

// 使用includes()检查数组是否包含NaN
const result3 = arr.includes(NaN);
console.log(result3); // 输出:true

// 使用indexOf()检查数组中NaN的索引
const index3 = arr.indexOf(NaN);
console.log(index3); // 输出:-1

// 使用includes()检查数组是否包含undefined
const result4 = arr.includes(undefined);
console.log(result4); // 输出:false

// 使用indexOf()检查数组中undefined的索引
const index4 = arr.indexOf(undefined);
console.log(index4); // 输出:-1

3. 结论

includes()和indexOf()都是JavaScript中非常有用的数组方法,它们可以帮助我们轻松地检查数组是否包含某个元素。虽然它们的功能相似,但在返回值和处理特殊情况方面存在一些关键区别。在实际开发中,我们应该根据具体的需求选择合适的方法。