js數組與字符串類型相同方法的比較


數組和字符串有很多相似的對方,比如數組和字符串都有以下方法:

  1. concat
  2. indexOf
  3. lastIndexOf
  4. slice
  5. 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"]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM