Javascript中关于replace()或substr()的性能

Javascript中关于replace()或substr()的性能,javascript,regex,replace,slice,substr,Javascript,Regex,Replace,Slice,Substr,我想知道关于使用string.replace()或string.substr()的Javascript性能。让我解释一下我在做什么 我有一根像绳子一样的绳子 str = "a.aa.a.aa." 我只需要“弹出”str中的最后一个元素,我总是知道它是什么类型的字符(例如,这里是一个点) 这很简单,我可以遵循很多方法,比如 str = str.substr(0, str.length-1) // same as using slice() 或 你会用什么方法?为什么?使用这种或那种方法在性能上

我想知道关于使用string.replace()或string.substr()的Javascript性能。让我解释一下我在做什么

我有一根像绳子一样的绳子

str = "a.aa.a.aa."
我只需要“弹出”str中的最后一个元素,我总是知道它是什么类型的字符(例如,这里是一个点)

这很简单,我可以遵循很多方法,比如

str = str.substr(0, str.length-1) // same as using slice()

你会用什么方法?为什么?使用这种或那种方法在性能上是否存在不足?字符串的长度可以忽略不计


(这是我的第一篇帖子,如果我做错了什么,请通知我!)

你必须在一个循环中做上千次吗?如果不是(而且“字符串的长度可以忽略不计”),任何方法都可以


也就是说,我更喜欢第一个选项,因为它使修剪最后一个字符的意图比第二个字符更清晰(哦,如果你需要运行无数次,它会更快。因为在regex的情况下,你不仅需要构建一个新字符串,还需要编译一个RegExp并针对输入运行它。)用于JavaScript使用中的性能测试


我为您的问题创建了一个测试用例,它显示
substr
要快得多(至少在firefox中是这样)。

substr方式应该总是比任何类型的RegExp都快。但性能差异应该很小

当你有这种疑问时,要么选择你最喜欢的(从风格上讲,只运行一次并不重要),要么使用


对于这个示例,请参见此处:-)。

如果只需要字符串中的最后一个字符,请使用下标,而不是替换:

str[str.length-1]

好吧,看看Sirko的jsPerf.com链接,它清楚地表明substr更快…好吧,这很奇怪。您发布的jsPerf链接显然支持regex,但Sirko支持substr。@xato仔细看看:名称在Florian的testcaseMy bad中切换。我觉得自己很蠢。编辑你的问题,这样我就可以取消对它的否决票:-)我为这个案例添加了一个jsperf@FlorianMargaine:太棒了。对于regex解决方案,jsvm必须编译regex,针对输入字符串运行它并构建一个新字符串。对于substr()解决方案,只需要构建一个新字符串。看看Sirko的答案。我的错,我实际上错了(感谢上帝!regex仍然很慢。)。你需要编辑答案,这样我就可以取消对它的否决票了。诚恳地说,我只能连续做一次。无论如何,我也更愿意使用第一个选项:)谢谢你的回复。为了插话,我加入了
切片(0,-1)
(这比较慢)。从逻辑上讲,值得一提的是,我们应该期望正则表达式速度较慢,因为它至少是在测试字符串部分匹配的步骤中添加的。太酷了!我忘记了[,我以前用过它。无论如何,谢谢你的回复!但是你怎么能用
substr
替换字符串的一个特定部分呢?即“我的名字是Hello World”。替换('Hello','Hi'));`,如果您需要首先获取起始位置和结束位置的索引,那么这种开销是否会影响
substr
的性能提升?@benjaminz您可以轻松地对jsperf进行测试,并根据自己的目的进行调整。然后重新运行它,亲自查看,-)是的,我知道,但我必须修改字符串,而不仅仅是读取最后一个元素。
str[str.length-1]