数组和字符串有很多相似的对方,比如数组和字符串都有以下方法:
- concat
- indexOf
- lastIndexOf
- slice
- includes
鉴于toString及valueOf方法基本类型都有,这里就不做过多介绍了
1、数组中indexOf和较数组中includes的比较
- 看函数的返回值:indexOf返回的是数值型的而includes返回的是布尔型的
- 都可以支持第二参数,而且的第二个参数都支持负数形式
- 数组中的indexOf不能判断数组中是否有NaN而includes可以
1.1 indexOf不能判断NaN
1 | var arr = [NaN]; |
1.2 判断稀疏数组结果不同
1 | var arr = [,,]; |
这是因为 indexOf 认为稀疏数组,省略掉的值是不存在的,但 includes 认为是undefined
2、字符串的indexOf和数组中的indexOf的比较
功能:搜索字符串or数组中的元素,并返回它所在的位置。
语法:array.indexOf(item,start)
- 这两个方法都可以接收两个参数
- 这两个方法在没有查找的指定的字符都返回-1
- 字符串中的indexOf中的第二个参数不支持负数而数组的indexOf支持
- 字符串的indexOf在传入参数不是字符串的情况下默认会转换为字符串而数组的indexOf不会进行数据类的转换
2.1 字符串的参数不支持负数
1 | let str = "abcd"; |
2.2 字符串的参数会自动转换
1 | let str = "1"; |
3、字符串的includes和数组中的includes的比较
功能:用来判断一个字符串or数组是否包含一个指定的值,如果是返回 true,否则false
语法:arr.includes(searchElement, fromIndex)
- 这两个方法都可以接收两个参数
- 这两个方法在没有查找的指定的字符都返回false
- 字符串中的includes中的第二个参数不支持负数而数组的includes支持
- 字符串的includes在传入参数不是字符串的情况下默认会转换为字符串而数组的includes不会进行数据类的转换
3.1 字符串的参数不支持负数
1 | let str = "abcd"; |
3.2 字符串的参数会自动转换
1 | let str = "1"; |
4、字符串的slice和数组中的slice的比较
功能:提取字符串or数组的某个部分,不会改变现有的值,而仅仅会返回被连接字符串or数组的一个副本。
语法:arr.slice(start,end)
- 在不传入任何参数的情况下都是把原来的值拷贝一份
- 字符串的slice的第二个参数是不支持负数的而数组的可以
- 都可以接收两个参数
1
2
3
4
5let arr1 = [1, 2, 3, 4, 5, 6];
console.log(arr1.slice(1, 4)) //[2, 3, 4];
let str1 = "hello root";
console.log(str1.slice(1,4)); //ell
5、字符串的concat和数组中的concat的比较
功能:方法用于连接两个或多个字符串or数组;不会改变现有的值,而仅仅会返回被连接字符串or数组的一个副本。
语法:arr.concat(arrayX,arrayX,......,arrayX)
- 这两个方法都没有限定参数,而且参数可以是任何数据类型的值
1 | let str1 = "hello"; |