實不相瞞,對於字符串中的slice()、substr()和 substring()這三個方法,我本身很長一段時間都是理不清的,每次用都得查一下文檔,由於他們長得實在是太像了。
咱們先來溫習一下,他們的特性以下:segmentfault
返回
被操做字符串的一個子字符串
,並且也都接受一或兩個參數不會改變
原字符串咱們來看幾個簡單的例子:數組
const str = 'hello world' console.log(str.slice(3)) // lo world console.log(str.substring(3)) // lo world console.log(str.substr(3)) // lo world console.log(str.slice(3, 7)) // lo w console.log(str.substring(3, 7)) // lo w console.log(str.substr(3, 7)) // lo worl
substring():slice()和substr()二位兄臺,非在下自大,大家能作的,我都能作!我感受大家沒有存在的必要!
slice():咱們在傳入負值的時候,是不同的。code
console.log(str.slice(-3)) // rld console.log(str.substring(-3)) // hello world
substring():咱們固然是有一些區別,但我想說的是大家能作的,我都能作!
substr():非在下自大,我感受大家能作的,我也都能作啊。
slice():非在下自大,我感受大家能作的,我也都能作啊。ip
咱們來看這樣一個例子:給定一個字符串,要求去掉最後一個逗號
。文檔
let str = 'a,b,' let newStr = str.substring(0, str.length - 1)
上面是substring()的寫法,咱們在來看看slice()的寫法:字符串
let str = 'a,b,' let newStr = str.slice(0, str.length - 1)
再來看看substr()的寫法:get
let str = 'a,b,' let newStr = str.substr(0, str.length - 1)
這三個方法都能作到,而且寫法也徹底同樣,這正是讓人容易困惑的地方!
還有一個要命的地方在於,數組中也有slice方法。
大膽假想一下,若是把substr()踢出去,就保留substring()和slice(),你還會懵嗎?
或者更大膽一點,把substr()和slice()都踢出去,就只保留substring(),我反正感受整個世界都清靜了!string
吐槽Javascript系列一:slice()、substr()和 substring()
吐槽Javascript系列二:數組中的splice和slice方法
吐槽Javascript系列三:數組的陷阱console