substring()
與 slice()
都可回傳部分 string,若 End Index 使用 負數
,則兩者有重大差異。
Version
macOS Catalina 10.15.2
VS Code 1.40.2
Quokka 1.0.259
Ramda 0.26.1
Greater End Index
let data = 'FP in JavaScript'
data.slice(6, 16) // ?
data.substring(6, 16) // ?
正常狀況下,end index 會比 start index 大,此時 slice()
等效於 substring()
。
Greater Start Index
let data = 'FP in JavaScript'
data.slice(16, 6) // ?
data.substring(16, 6) // ?
data.substring(6, 16) // ?
若 start index 比 end index 大時,slice()
會正常回傳 empty string,但 substring()
會自動 swap argument 回傳部分 string。
Negative Index
let data = 'FP in JavaScript'
data.slice(6, -2) // ?
data.substring(6, -2) // ?
data.substring(6, 0) // ?
data.substring(0, 6) // ?
若 index 出現 負數
,slice()
會正常運作,但 substring()
會將 負數
自動轉成 0
,若 start index 還大於 end index,還會繼續 swap argument,因此結果不可預期。
Conclusion
- 實務上建議使用
slice()
取代substring()
,較不會有意想不到結果,尤其 index 為負數
時,一定得使用slice()