实不相瞒,对于字符串中的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