數組和字符串有很多相似的對方,比如數組和字符串都有以下方法:
- concat
- indexOf
- lastIndexOf
- slice
- includes
鑒於toString及valueOf方法基本類型都有,這里就不做過多介紹了
1、數組中indexOf和較數組中includes的比較
- 看函數的返回值:indexOf返回的是數值型的而includes返回的是布爾型的
- 都可以支持第二參數,而且的第二個參數都支持負數形式
- 數組中的indexOf不能判斷數組中是否有NaN而includes可以
1.1 indexOf不能判斷NaN
var arr = [NaN];
console.log(arr.indexOf(NaN)) //-1
console.log(arr.includes(NaN)) //true
1.2 判斷稀疏數組結果不同
var arr = [,,];
console.log(arr.indexOf(undefined))//-1
console.log(arr.includes(undefined))//true
這是因為 indexOf 認為稀疏數組,省略掉的值是不存在的,但 includes 認為是undefined
2、字符串的indexOf和數組中的indexOf的比較
功能:搜索字符串or數組中的元素,並返回它所在的位置。
語法:array.indexOf(item,start)
- 這兩個方法都可以接收兩個參數
- 這兩個方法在沒有查找的指定的字符都返回-1
- 字符串中的indexOf中的第二個參數不支持負數而數組的indexOf支持
- 字符串的indexOf在傳入參數不是字符串的情況下默認會轉換為字符串而數組的indexOf不會進行數據類的轉換
2.1 字符串的參數不支持負數
let str = "abcd";
let arr = ["a","b","c","d"];
console.log(str.indexOf("a", -1)); //0
console.log(arr.indexOf("a", -1)); //-1
2.2 字符串的參數會自動轉換
let str = "1";
let arr = ["1"];
console.log(str.indexOf(1)); //0
console.log(arr.indexOf(1)); //-1
3、字符串的includes和數組中的includes的比較
功能:用來判斷一個字符串or數組是否包含一個指定的值,如果是返回 true,否則false
語法:arr.includes(searchElement, fromIndex)
- 這兩個方法都可以接收兩個參數
- 這兩個方法在沒有查找的指定的字符都返回false
- 字符串中的includes中的第二個參數不支持負數而數組的includes支持
- 字符串的includes在傳入參數不是字符串的情況下默認會轉換為字符串而數組的includes不會進行數據類的轉換
3.1 字符串的參數不支持負數
let str = "abcd";
let arr = ["a","b","c","d"];
console.log(str.includes("a", -1)); //true
console.log(arr.includes("a", -1)); //false
3.2 字符串的參數會自動轉換
let str = "1";
let arr = ["1"];
console.log(str.includes(1)); //true
console.log(arr.includes(1)); //false
4、字符串的slice和數組中的slice的比較
功能:提取字符串or數組的某個部分,不會改變現有的值,而僅僅會返回被連接字符串or數組的一個副本。
語法:arr.slice(start,end)
- 在不傳入任何參數的情況下都是把原來的值拷貝一份
- 字符串的slice的第二個參數是不支持負數的而數組的可以
- 都可以接收兩個參數
let 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)
- 這兩個方法都沒有限定參數,而且參數可以是任何數據類型的值
let str1 = "hello";
let str2 = " world!";
console.log(str1.concat(str2)); //"hello world!"
let arr1 = ["hello"];
let arr2 = ["root"];
console.log(arr1.concat(arr2)); //["hello", "root"]