为什么substring不处理负指数?

时间:2016-08-26 20:43:51

标签: javascript string

substr()完美处理负指数,但substring()只接受非负指数。

是否有理由不使用substr支持substring?通过将索引空间视为循环组,负指数的使用在很多情况下非常有用。为什么MDN会将substr表示为“已弃用”?

3 个答案:

答案 0 :(得分:4)

substring是指定开始和结束索引的时间。 substr是指定起始偏移量和长度的时间。他们做不同的事情,并有不同的用例。

编辑: 为了更好地回答确切的问题 为什么substring不处理负指数?

substring指定字符串中字符的起始和结束索引substr处理起始偏移量和长度。我认为substring不允许负索引是有道理的,因为实际上不存在负索引(字符串中的字符从0到n索引,“负索引”会超出界限)。由于substr正在处理偏移索引,我觉得术语偏移足够松散以允许负偏移,这当然意味着向后计数从字符串的末尾而不是从头开始。这可能只是语义,但它是我如何理解它。

为什么substr已被弃用?

我认为实际上已弃用。

revision historysubstr MDN表示根据此博文发布了弃用通知:

  

2016年8月16日上午12:00:34   hexalys   根据{{​​3}}

添加弃用的提及

其中声明不推荐使用HTML字符串方法(它们应该是!)。这些是将字符串包装在HTML标记中的方法,即"abc".sub()将返回<sub>abc</sub>。博客文章列出了所有HTML字符串方法,并且imho错误地将subtr包含为HTML字符串方法(事实并非如此)。

所以这看起来像是对我的误解。

(摘录如下,我强调的重点)

  

亮点:

     

臭名昭着的“字符串HTML方法”:String.prototype.anchor(name),String.prototype.big(),String.prototype.blink(),   String.prototype.bold(),String.prototype.fixed(),   String.prototype.fontcolor(color),String.prototype.fontsize(size),   String.prototype.italics(),String.prototype.link(href),   String.prototype.small(),String.prototype.strike(),   String.prototype.sub(), String.prototype.substr(start,length),以及   String.prototype.sup()。浏览器略微实现了这些   以各种方式不同,在一种情况下导致安全   问题(而不只是在理论上!)。这是一场艰苦的战斗,但是   最终浏览器和ECMAScript规范匹配的行为   JavaScript标准定义了。

https://blog.whatwg.org/javascript

答案 1 :(得分:3)

当您只对未知长度的字符串的最后N个字符感兴趣时,

substr特别有用。

例如,如果您想知道字符串是否以单个字符结尾:

function endsWith(str, character) {
  return str.substr(-1) === character;
}

endsWith('my sentence.', '.'); // => true
endsWith('my other sentence', '.'); // => false

使用substring实现同样的功能需要先计算字符串的长度。

function endsWith(str, character) {
  var length = str.length;
  return str.substring(length - 1, length) === character;
}

这两个函数都可用于获得相同的结果,但substr更方便。

答案 2 :(得分:3)

JS中有三个函数或多或少相同:

  • substr
  • slice
  • substring

我猜大多数人都使用后者,因为它与数组匹配。前两个是或多或少的历史遗留物(substr在JS1中,然后substr有两种不同的风格等。)

  

为什么MDN表示substr被“弃用”?

this postMathias添加了通知,其中sudo adduser john列在“字符串HTML方法”(?)下。弃用的原因是它属于Annex B,其中包含:

  

本附件描述了基于Web浏览器的ECMAScript实现的各种遗留功能和其他特性。本附录中指定的所有语言功能和行为都具有一个或多个不良特征,并且在没有遗留用法的情况下将从本规范中删除。