循环到单个语句

时间:2016-05-11 10:17:44

标签: javascript jquery loops replace

在我们的一个应用程序中,我们有以下几行:

while (text.indexOf(' ') !== -1)
    text = text.replace(' ', '_');
while (text.indexOf('*') !== -1)
    text = text.replace('*', 'x');

据我所知,我也可以这样写它以避免循环:

text = text.replace(/ /g, '_');
text = text.replace(/*/g, 'x');

两个版本中的哪一个会更好的编程风格?这两者之间是否存在差异(性能,结果,错误......)?如果可能,我们是否必须避免循环?

2 个答案:

答案 0 :(得分:3)

我注意到使用正则表达式会让新的(新鲜的/没有经验的)开发人员感到困惑。因此,他们会发现第一个选项更容易阅读并掌握它的作用。

然而,第二个选项是:

  • 简洁明了,也易于阅读(前言,你熟悉正则表达式);
  • 理论上它应该更快,因为你让本机代码完成所有繁重的工作,而不是让它解释循环代码重新分配字符串变量。但是,正则表达式有一些开销可能导致效率低下。但是,它在现实生活中并不适用(特别是在这种情况下)。

对于错误,如果你不在你的正则表达式字符串中犯任何错误,它不会抛出任何错误。具有讽刺意味的是,你做过(你应该逃避特殊字符*)。所以,这是选择选项1的一个原因:)

text.replace(/\*/g, 'x');

答案 1 :(得分:1)

没有脑子 - 你的第二个选择。如果可以避免,请不要调用循环。 Javascript是一种函数式语言;用它!

更好的解决方案是将它们链接如下:

text = text.replace(/ /g, "_").replace(/\*/g, "x");