slice()
1、String中
-
文法
抽取一個子字元串string.slice(start, end)
-
描述
将傳回一個含有字元串slice()
的片段的字元串或傳回它的一個子串。 但是該方法不修改string
string
-
參數
start:
要抽取的片段的起始下标。如果是負數,那麼該參數聲明了從字元串的尾部開始算起的位置。也就是說,-1指字元串中的最後一個字元,-2指倒數第二個字元,以此類推
緊接着要抽取的片段的結尾的下标。如果沒有指定這一參數,那麼要抽取的子串包括start到原字元串結尾的字元串。如果該參數是負數,那麼它聲明了從字元串的尾部開始算起的位置end:
-
傳回值
一個新字元串,包括字元串
從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)
-
描述
将傳回數組的一部分,或者說是一個子數組。傳回的數組包含從start 開始到end之間的所有元素,但是不包括end所指的元素。如果沒有指定end,傳回的數組包含從start開始到原數組結尾的所有元素slice()
-
參數
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的差別
-
方法會傳回一個新的數組,不改變原數組;slice()
方法傳回包含已删除元素的數組,會改變原數組splice()
-
方法第一個參數表示截取的起始位置(包括slice(start, end)
所指的元素在内),第二個表示截取到的位置(不包括start
該位置的元素);end
第一個參數也表示截取的起始位置,第二個參數表示要截取的元素個數splice(start, deleteCount)