为什么子字符串不处理负下标
Why substring does not handle negative indices?
substr()
可以很好地处理负索引,而substring()
只能接受非负索引。
是否有不使用substr
而使用substring
的原因?在很多情况下,通过将索引空间视为循环群,使用负索引是非常有用的。为什么substr
被MDN指示为"已弃用"?
substring用于指定起始和结束索引。Substr用于指定起始偏移量和长度。它们做不同的事情,有不同的用例。
编辑:为了更好地回答
为什么子字符串不处理负索引?
substring
指定字符串中字符的起始和结束索引。substr
处理起始偏移量和长度。对我来说,substring
不允许负索引是有意义的,因为确实没有负索引这样的东西(字符串中的字符从0索引到n,一个"负索引");会出界)。由于substr
处理的是偏移量和索引,我觉得术语偏移量足够宽松,可以允许负偏移量,这当然意味着从字符串的末尾向后计数,而不是从开始向前计数。这可能只是语义,但这就是我如何理解它的方式。
为什么不支持substr
?
我认为实际上不是不赞成。
substr MDN的修订历史表明,弃用通知是基于这篇博客文章提出的:
Aug 16, 2016, 12:00:34 AMhexalys每https://blog.whatwg.org/javascript
添加不推荐的提及
声明HTML字符串方法已弃用(它们应该弃用!)这些是将字符串包装在HTML标签中的方法,例如,"abc".sub()
将返回<sub>abc</sub>
。这篇博文列出了所有的HTML字符串方法,而且我认为,错误地将subtr
包含为HTML字符串方法(它不是)。
所以在我看来这是一个误会。
(节选如下,重点由我加上)
https://blog.whatwg.org/javascript亮点:
臭名昭著的"字符串HTML方法":string .prototype.anchor(name), string .prototype.big(), string .prototype.blink(),String.prototype.fixed String.prototype.bold (), (),String.prototype.fontcolor(颜色),String.prototype.fontsize(大小),String.prototype.italics (), String.prototype.link (href),String.prototype.strike String.prototype.small (), (),String.prototype.sub (), String.prototype。substr(start, length)String.prototype.sup()。浏览器稍微实现了这些不同的方式,在一种情况下导致证券问题(不只是理论上的!)这是一场艰苦的战斗,但是最终浏览器和ECMAScript规范匹配了这个行为
substr
在您只对长度未知的字符串的最后N个字符感兴趣时特别有用。
例如,如果您想知道一个字符串是否以单个字符结束:
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
更方便。
JS中有三个函数或多或少做同样的事情:
-
substring
-
substr
-
slice
我想大多数人都使用后者,因为它匹配它的数组对应。前两个或多或少是历史遗留(substring
出现在JS1中,然后substr
出现在两个不同的版本中等等)。
为什么substr被MDN指示为"deprecated" ?
根据Mathias的帖子添加了通知,其中substr
列在"字符串HTML方法"(?)下。弃用的原因是它属于附件B,它说:
这个附件描述了基于ECMAScript实现的web浏览器的各种遗留特性和其他特性。本附件中指定的所有语言特性和行为都有一个或多个不需要的特征,在没有遗留使用的情况下,将从本规范中删除。
- 如何告诉MathJax对下标使用替代语法
- 返回JSON中的下标
- 在这种情况下如何处理数据驱动的输入
- HTML 输入中的上标和下标
- 如何在没有引导的情况下正确处理 AngularJS 应用程序中的弹出窗口(模态)
- Javascript,为带有下标和上标的文本字段创建模板
- 如何找到下标字母表的unicode
- D3默认情况下只处理作为数据源的数组吗
- Javascript-将字符串中的所有数字更改为下标
- 一次回车键按下会运行两次JavaScript键按下事件处理程序代码
- jQuery-在不使用类或父级的情况下单独处理每个img元素
- 在没有重定向的情况下快速处理表单.没有preventDefault的数据,但是重定向.不使用preventDefault
- 在这种情况下如何处理复选框
- 有没有一般的下标函数
- 如何JSON.解析并忽略数组下标
- 数组的下标是否被移到了正确的位置向左还是向右
- 从js对象渲染下标到HTML
- 在Javascript中给字符串下标
- Javascript性能考虑.点运算符比下标符号快
- 为什么子字符串不处理负下标