天天看點

JS中slice和splice的差別slice()splice()slice和splice的差別

slice()

1、String中

  • 文法

        

    string.slice(start, end)

    抽取一個子字元串
  • 描述

        

    slice()

    将傳回一個含有字元串

    string

    的片段的字元串或傳回它的一個子串。 但是該方法不修改

    string

  • 參數

        

    start:

    要抽取的片段的起始下标。如果是負數,那麼該參數聲明了從字元串的尾部開始算起的位置。也就是說,-1指字元串中的最後一個字元,-2指倒數第二個字元,以此類推

        

    end:

    緊接着要抽取的片段的結尾的下标。如果沒有指定這一參數,那麼要抽取的子串包括start到原字元串結尾的字元串。如果該參數是負數,那麼它聲明了從字元串的尾部開始算起的位置
  • 傳回值

        一個新字元串,包括字元串

    string

    start

    開始(包括

    start

    )到

    end

    為止(不包 括

    end

    )的所有字元
  • Bug

        在

    JavaScript 3.0(InternetExplorer 4)

    中,參數

    start

    的值是不能是負數。負的

    start

    值指定的不是從字元串尾部開始算起的字元位置,而是指定第 個字元的位置
let str = 'abcdefg'

let newStr = str.slice(0, 4)    // newStr is 'abcd'; str is 'abcdefg'

let newStr = str.slice(2, 4)    // newStr is 'cd'; str is 'abcdefg'

let newStr = str.slice(4)      // newStr is 'efg'; str is 'abcdefg'

let newStr = str.slice(3, -1)   // newStr is 'def'; str is 'abcdefg'

let newStr = str.slice(3, -2)   // newStr is 'de'; str is 'abcdefg'

let newStr = str.slice(-3, -1)  // newStr is 'ef', IE 4 ———> newStr is 'abcdef'
           

2、Array中

  • 文法

        

    array.slice(start, end)

    傳回數組的一部分
  • 描述

        

    slice()

    将傳回數組的一部分,或者說是一個子數組。傳回的數組包含從start 開始到end之間的所有元素,但是不包括end所指的元素。如果沒有指定end,傳回的數組包含從start開始到原數組結尾的所有元素
  • 參數

        

    start:

    數組片段開始處的數組下标。如果是負數,它聲明從數組尾部開始算起的位置。 也就是說,-1指最後一個元素,-2指倒數第二個元素,以此類推

        

    end:

    數組片段結束處的後一個元素的數組下标。如果沒有指定這個參數 包含從

    start

    開始到數組結束的所有元素。如果這個參數是負數, 從數組尾部開始算起的元素
  • 傳回值

        一個新數組,包含從

    start

    end

    (不包括該元素)指定的

    array

    元素
  • Bug

        在

    Internet Explorer 4

    中,參數

    start

    不能為負數
let arr = [1, 2, 3, 4, 5]

let newArr = arr.slice(0, 3)    // newArr is [1, 2, 3]; arr is [1, 2, 3, 4, 5]

let newArr = arr.slice(3)      // newArr is [4, 5]; arr is [1, 2, 3, 4, 5]

let newArr = arr.slice(1, -1)   // newArr is [2, 3, 4]; arr is [1, 2, 3, 4, 5]

let newArr = arr.slice(-3, -2)  // newArr is [3]; arr is [1, 2, 3, 4, 5] , IE 4 ——> newArr is [1, 2, 3]
           

splice()

  • 文法

        

    array.splice(start, deleteCount, value, ...)

    插入、删除或替換數組的元素
  • 描述

        

    splice()

    将删除從

    start

    開始(包括

    start

    所指的元素在内)的零個或多個元素,并且用參數清單中聲明的一個或多個值來替換那些被删除的元素。位于插入或删除的元素之後的數組元素都會被移動,以保持它們與數組其他元素的連續性。

        注意:雖然

    spllce()

    方法與

    slice()

    方法名字相似,但作用不同,

    splice()

    會直接修改數組
  • 參數

        

    start:

    開始插入和(或)删除的數組元素的下标

        

    deleteCount:

    start

    開始,包括

    start

    所指的元素在内要删除的元素個數。這個參數是可選的,如果沒有指定它,

    splice()

    将删除從

    start

    開始到原數組結尾的所有元素

        

    value, ...

    要插人數組的零個或多個值,從

    start

    所指的下标處開始插入
  • 傳回值

        如果從

    array

    中删除了元素,傳回的是含有被删除的元素的數組。但是要注意,由于存在—個

    bug

    ,是以在

    JavaScriptl.2

    Netscape

    實作中,傳回的并不總是數組
  • Bug

        

    splice()

    方法假定在各種情況下均傳回一個包含已删除元素的數組。但是,在

    Netscape

    JavaScript 1.2

    解釋器中,如果删除的是單個元素,那麼該方法傳回的是元素,而不是包含那個元素的數組。如果沒有删除任何元素,它不是傳回一個空數組,而是什麼都不傳回。隻要把語言版本明确地設定為

    1.2

    JavaScript

    Netscape

    實作都有這種

    bug

    行為
let arr = [1, 2, 3, 4, 5, 6, 7, 8]

let newArr = arr.splice(4)        // newArr is [5, 6, 7, 8]; arr is [1, 2 ,3, 4]

let newArr = arr.splice(1, 2)      // newArr is [2, 3]; arr is [1, 4, 5, 6, 7, 8]

let newArr = arr.splice(1, 1) // 删除元素      
// Netscape/JavaScript 1.2 傳回 2 ,應該 newArr is [2]; arr is [1, 3, 4, 5, 6, 7, 8]

let newArr = arr.splice(1, 0, 2, 3) // 插入元素  
// Netscape/JavaScript 1.2 newArr is undefined ,應該 newArr is []; arr is [1, 2, 3, 2, 3, 4, 5, 6, 7, 8]

let newArr = arr.splice(1, 5, 2, 3) // 删除并插入元素
// newArr is [2, 3, 4, 5, 6]; arr is [1, 2, 3, 7, 8]
           

slice和splice的差別

  1. slice()

    方法會傳回一個新的數組,不改變原數組;

    splice()

    方法傳回包含已删除元素的數組,會改變原數組
  2. slice(start, end)

    方法第一個參數表示截取的起始位置(包括

    start

    所指的元素在内),第二個表示截取到的位置(不包括

    end

    該位置的元素);

    splice(start, deleteCount)

    第一個參數也表示截取的起始位置,第二個參數表示要截取的元素個數

繼續閱讀