includes js(保姆级教程)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

在 JavaScript 开发中,处理数组和字符串的常见需求之一是“判断某个元素或子字符串是否存在”。includes() 方法作为 ES7 引入的核心工具,因其简洁直观的语法,成为开发者高频使用的功能之一。无论是验证用户输入、过滤数据,还是构建复杂的应用逻辑,includes js 的应用都贯穿于开发的各个阶段。本文将从基础语法到高级技巧,结合实际案例,帮助读者全面掌握这一方法的使用场景与最佳实践。


一、includes() 方法的基础用法

1.1 数组的 includes() 方法

includes() 是 JavaScript 数组和字符串的原生方法,用于判断某个值是否存在于数组或字符串中,并返回布尔值(truefalse)。其语法如下:

array.includes(valueToFind, fromIndex);  
string.includes(searchString, position);  
  • 参数说明
    • valueToFind:要查找的值。
    • fromIndex(可选):开始查找的索引位置,默认为 0

示例 1:基础用法

const fruits = ["apple", "banana", "orange"];  
console.log(fruits.includes("banana")); // true  
console.log(fruits.includes("grape")); // false  

示例 2:字符串的 includes()

const sentence = "Hello World!";  
console.log(sentence.includes("World")); // true  
console.log(sentence.includes("hello")); // false(区分大小写)  

1.2 与 indexOf() 的对比

includes() 出现之前,开发者通常使用 indexOf() 来判断元素是否存在。两者的区别如下:
| 方法 | 返回值类型 | 语法简洁性 | 处理 NaN 的能力 |
|--------------|------------------|------------|-------------------|
| includes() | boolean | 更简洁 | 能正确判断 NaN |
| indexOf() | 索引值(number)| 需额外判断 | 无法判断 NaN |

示例:判断 NaN 的存在

const arr = [1, 2, NaN];  
console.log(arr.includes(NaN)); // true  
console.log(arr.indexOf(NaN) !== -1); // false(因为 NaN !== NaN)  

二、进阶用法与场景应用

2.1 结合条件语句进行逻辑判断

在表单验证、权限控制等场景中,includes() 可直接嵌入条件语句中,提升代码的可读性。

案例:邮箱验证

function isValidEmail(email) {  
  const allowedDomains = ["gmail.com", "example.com", "outlook.com"];  
  const domain = email.split("@")[1];  
  return allowedDomains.includes(domain);  
}  
console.log(isValidEmail("user@example.com")); // true  

2.2 处理复杂数据结构

当数组元素是对象或嵌套结构时,需结合其他方法(如 map()JSON.stringify())实现深度判断。

案例:对象数组的判断

const users = [  
  { id: 1, name: "Alice" },  
  { id: 2, name: "Bob" }  
];  
// 直接判断对象(失败)  
console.log(users.includes({ id: 1, name: "Alice" })); // false(对象引用不同)  
// 通过 `JSON.stringify` 转换后比较  
const targetUser = JSON.stringify({ id: 1, name: "Alice" });  
const found = users.some(user =>  
  JSON.stringify(user) === targetUser  
);  
console.log(found); // true  

2.3 字符串的模糊匹配与子串查找

在需要模糊匹配或检查子串时,includes() 可替代正则表达式,简化代码逻辑。

案例:文件格式验证

function validateFileExtension(fileName) {  
  const validExtensions = [".jpg", ".png", ".pdf"];  
  return validExtensions.some(ext => fileName.includes(ext));  
}  
console.log(validateFileExtension("report.pdf")); // true  

三、性能优化与注意事项

3.1 处理大数组的性能

对于超大数据集(如包含数万条记录的数组),includes() 的时间复杂度为 O(n),可能影响性能。此时可考虑以下优化方法:

  • 使用 Set 结构
    const largeArray = new Array(10000).fill().map((_, i) => i);  
    const searchValue = 9999;  
    const set = new Set(largeArray);  
    console.log(set.has(searchValue)); // 更快的 O(1) 时间复杂度  
    
  • 提前终止条件
    若需在特定范围内查找,可结合 fromIndex 参数减少遍历范围。

3.2 值的类型敏感性

includes() 对类型敏感,例如 3"3" 会被视为不同值。开发者需注意数据类型的统一。

示例:类型差异导致的错误

const numbers = [1, 2, 3];  
console.log(numbers.includes("3")); // false  

3.3 兼容性问题

虽然现代浏览器和 Node.js 环境已全面支持 includes(),但在处理老旧系统时,可通过 Polyfill 实现兼容:

if (!Array.prototype.includes) {  
  Object.defineProperty(Array.prototype, "includes", {  
    value: function(searchElement, fromIndex = 0) {  
      // 实现逻辑...  
    }  
  });  
}  

四、常见问题与解决方案

4.1 如何判断多个值是否存在?

使用 Array.some() 或多次调用 includes()

const arr = [10, 20, 30];  
// 方法 1:直接判断  
console.log(arr.includes(10) || arr.includes(40)); // true  
// 方法 2:使用 `some()`  
console.log([10, 40].some(value => arr.includes(value))); // true  

4.2 如何结合 includes() 过滤数组?

通过 filter() 方法结合 includes() 实现数据筛选:

const allItems = ["apple", "banana", "orange", "grape"];  
const excludedItems = ["banana", "grape"];  
const filteredItems = allItems.filter(item =>  
  !excludedItems.includes(item)  
);  
console.log(filteredItems); // ["apple", "orange"]  

4.3 如何处理 undefinednull 的边界情况?

需明确判断 undefined 是否为目标值,避免逻辑错误:

const arr = [undefined, null, 0];  
console.log(arr.includes(undefined)); // true  
console.log(arr.includes(null)); // true  

结论

includes js 作为 JavaScript 的核心方法,凭借其简洁的语法和直观的逻辑,成为开发者处理数据存在性判断的首选工具。从基础的数组元素查找,到复杂对象的深度比较,再到性能优化和兼容性处理,掌握其用法能显著提升代码的可读性和效率。随着实践的深入,开发者还可结合 some()find() 等方法,构建更灵活的解决方案。希望本文能帮助读者在实际项目中更好地应用 includes js,进一步优化开发流程。


(全文约 1800 字)

最新发布