slice(), substr() 和 substring()

介绍

对于一个字符串而言,slice(), substr()substring() 这三种方法都可以根据指定的参数截取子字符串,虽是如此,三种方法在相同参数的情况下,也会截取到不同的字符串,否则也不必衍生出这么多同功能却不同名的方法了。

虽说这三种方法是非常基础的方法,但是却很容易忘记,每次使用的时候,都需要去百度一下用法十分麻烦,于是决定自己记录下来,供以后查阅。

使用

所有方法的第一个参数的意义都是相同的,即截取起始位置,但是第二个参数三个方法却稍有不同,即 slice()substring() 指定的都是截取的终止位置(不包含,相当于 [start, end)),而 substr() 的第二个参数代表截取的长度。所以当取一个参数的时候,所有方法的返回值是相同的,如下:

如果参数是负值,那么三个方法的处理方式又有所不同,分别如下:

  1. slice() 方法会把所有的负值参数与字符串的长度相加。
  2. substr() 方法会把第一个负值参数与字符串长度相加,第二个负值为 0 。
  3. substring() 方法会把所有的负值参数转换成 0 。

所以,先来看看下面这个例子:

由于只指定了方法的第一个参数,且都是负值,所以 slice()substr() 方法的处理方式相同,即将负值与字符串长度相加,最终结果也想通。而 substring() 方法则会将负值转换成 0, 所以相当于 substring(0),返回整个字符串。

下面再来看看当两个参数都为负值的时候的例子:

对于 slice(-4, -1),会转换成 slice(-4 + message.length, -1 + message.length) ,所以会取得 tte

对于 substr(-2, 2),由于 substr() 方法的第二个参数指定的是截取字符串的长度,又因为 -2 会转换成 -2 + message.length,所以自然取得字符串的后两位。

对于 substring(3, -4),由于 substring() 会将所有的负值转换成 0, 所以这条语句相当于 substring(3, 0),因为第二个数字小于第一个数字,所以会自动转换成 substring(0, 3),所以取得前三位字符。

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注