首页 > 其他分享 >ES6+ includes()

ES6+ includes()

时间:2023-01-15 10:31:56浏览次数:40  
标签:返回 ES6 indexOf includes str 字符串 true


1. 前言

字符串查找一直都是程序中的常用操作,在 ES5 中查找一个字符串是否包含另一个字符串,一般有两种思维。一是使用正则的方式来匹配,二是使用 ES5 的方式,如 indexOf、lastIdexOf、search。使用正则比较简单,但是需要对正则语法有一定的了解。一般使用 ​​indexOf()​​ 来进行字符串的查找 ,它会返回查询后第一次出现的指定值的索引,如果未找到该值,则返回 -1。

ES6 新增方法 ​​includes()​​​ 方法,来替代 ​​indexOf()​​​ 弥补它的不足。而 ES6 提供了新的方法 ​​includes()​​ 可以更好地进行判断,而不需要根据返回的索引进行判断。

2. 方法详情

​includes()​​ 方法主要用于查询字符串,判断一个字符串是否包含另外一个字符串,其返回值是如果包含该字符串则返回 true 否则返回 false。

使用语法:

str.includes(searchString[, position])

参数说明:

参数

描述

searchString

需要查找的目标字符串

position

(可选) 从当前字符串的哪个索引位置开始搜寻子字符串,默认值为 0

实例:

var str = 'hello world';

console.log(str.includes('hello')); // true
console.log(str.includes('hello', 3)); // false

在没有传入确切的查询字符串时,​​searchString​​ 会被强制设置成 “undefined”,然后在当前字符串中查找这个值。

'undefined'.includes('');     // 返回 true
'undefined'.includes(); // 返回 true
'undefine'.includes(); // 返回 false
'5axxw ES6 wiki'.includes(); // 返回 false

上面的代码最容易在面试中出现,考察你对 ​​includes()​​​ 方法的理解程度。第 1 行返回 ​​true​​​ 很容易理解,查询一个空字符串嘛这个没问题,但第 2 行返回的结果也是 ​​true​​​,这说明查询的字符串在 “undefined” 字符串中,还不能说被设置成了字符串 “undefined” 。
第 3 、 4 行代码中也没有传值,但返回的结果为 ​​​false​​,从而证明了在没有传值时,第一个参数的值被设置成字符串 “undefined”。

在没传值时和 ​​indexOf()​​​ 的查询结果是一致的。下面我们看 ​​indexOf()​​ 在没有参数时是一个什么样的结果。

'undefined'.indexOf();    // 返回 0
'undefine'.indexOf(); // 返回 -1

上面的代码中,第 1 行返回的结果是 0,是查询结果的位置,第 2 行返回的是 -1,说明没有查询到。虽然返回的结果不一样,但是意义是一样的。​​includes()​​​ 可以替换 ​​indexOf()​​​ 使用,​​includes()​​​ 好处在于它可以直接判断,而 ​​indexOf()​​ 还需要对结果进行对比,如下实例:

const str = '5axxw ES6 wiki';
if (str.includes('ES6')) {
// todo

if (str.indexOf('ES6') !== -1) {
// todo
}

上面代码中的两个 if 判断是一个意思,但是使用 ​​includes()​​ 很简洁,这也是 ES6 设计的初衷。

3. 使用场景

​includes()​​​ 方法的引入是为了代替 ​​indexOf()​​ 作为字符串的查询的方法使用。

3.1 区分大小写

​includes()​​ 方法是区分大小写的。

'5axxw es6'.includes('5axxw');  // true
'5axxw es6'.includes('Imooc'); // false

3.2 一个参数

​includes()​​ 在只有一个参数时,会从字符串的第一个字符开始查找。

var str = "I love 5axxw.";

console.log(str.includes("I love")); // true
console.log(str.includes("5axxw")); // true
console.log(str.includes("e5axxw")); // false

3.3 两个参数

当 ​​includes()​​ 有第二个参数的时候,会从第二个参数作为索引的位置开始。

var str = "I love 5axxw.";

console.log(str.includes("love", 3)); // false
console.log(str.includes("ove", 3)); // true

第二个参数的意思是,查找字符串开始的位置,例子中的 3 就是查找的位置,所以查找的目标字符串是 ​​ove 5axxw.​​。

当第二个参数是负数时,只要查找的字符串在目标字符串里,无论是多少,都会返回 true。

var str = "I love 5axxw.";

console.log(str.includes("love", -1)); // true
console.log(str.includes("ove", -100)); // true
console.log(str.includes("Love", -1)); // false

4. 注意事项

在使用 ​​includes()​​ 时需要注意类型转换的一些问题:

4.1 includes 会做类型转换

let numStr = '2020';

numStr.includes('2'); // true
numStr.includes(2); // true

在这个例子中 ​​numStr​​​ 是一个字符串,判断字符串 ​​2​​​ 和数字 ​​2​​​ 都是能返回正确的结果,这里 ​​includes()​​ 会把数字转换成字符串 ‘2’ 然后再执行查询操作。

4.2 不能对 Number 类型直接使用

let numStr = 2020;

numStr.includes(2); // Uncaught TypeError: numStr.includes is not a function

从这个例子可以看出,​​includes​​​ 是字符串上的方法,而这里直接使用在数值类型上所以会报语法错误。如果要使用 ​​includes​​ 来查询,就必须把数字转化成字符串,然后进行查询。

let numStr = 2020;
("" + numStr).includes(0) // true

这里对 ​​numStr​​ 前加一个空字符串可以进行类型转换。

5. 小结

本节讲解了字符串的 ​​includes()​​ 方法的使用,总结以下几点:

  1. 在没有传参时,查询字符串会被设置成 “undefined”;
  2. ​includes()​​ 区分大小写;
  3. 当有第二个参数时,则会从第二个参数作为索引的位置开始查找,并包含当前位置的字符;
  4. 当第二个参数是负数时,只要查找的字符串在目标字符串里,无论是多少,都会返回 true;
  5. 判断数字时,需要把数字转换成字符串类型才能查询。

标签:返回,ES6,indexOf,includes,str,字符串,true
From: https://blog.51cto.com/10zhancom/6008328

相关文章

  • ES6-遍历器与for-of循环
    一认识Iterator对象(可遍历对象)console.log([1,2]);console.log([1,2][Symbol.iterator]);//ƒvalues(){[nativecode]}//方括号的方式调用,Sym......
  • [VueJsDev] 基础知识 - ES6循环使用手册
    ES6循环使用手册:::details目录目录​ES6循环使用手册​​​Array.1:filter()方法​​​​Array.2:forEach​​​​Array.3:for循环​​​​Array.4:map()循环​......
  • 记好这24个ES6方法,用于解决实际开发的JS问题
    本文主要介绍24中es6方法,这些方法都挺实用的,本本请记好,时不时翻出来看看。  1.如何隐藏所有指定的元素1consthide=(el)=>Array.from(el).forEach(e=>(e.......
  • ES6-Map
    一。怎么用constm=newMap();console.log(m);//{size:0}m.set('a',1);//添加键、值m.set('b',2);console.log(m);//......
  • ES6-Set
    一。怎么用:1.和数组比较,数组是一系列有序的数据集合,Set是无序、没有重复值的数据集合2.数组的创建有两种字面量和newArray(1,2,3),set只能通过newSet()创建set实例;格式是{数据......
  • ES6 中 Promise对象使用学习
    转载请注明出处:Promise 对象是JavaScript的异步操作解决方案,为异步操作提供统一接口。它起到代理作用(proxy),充当异步操作与回调函数之间的中介,使得异步操作具备同步......
  • ES6-展开运算符
    一。数组展开运算符1.怎么用:注:扩展运算符,可以将一个数组转为用逗号分隔的参数序列;...[1,2,3]-----1,2,3console.log(Math.max(...[1,2,3,4]));//相当于以下......
  • ES6-剩余参数
    一.怎么用constfn=(x,y,...args)=>{//定义剩余参数要加...使用时不用加...不一定叫args,满足标识符命名即可;console.log(args);//永远是......
  • ES6-函数参数的默认值
    一.看看怎么用constfn=(x,y=1)=>{returnx*y;//2}fn(2);//x=2,y没有实参使用默认值y=1;二.默认值生效条件:该形参===......
  • ES6-对象字面量的增强
    一.属性、方法的简洁表示法键名和变量/常量名一样的时候,可以只写一个;我们在对象解构赋值时,等号左边也可以这样;方法可以省略冒号和function关键字    constse......