【问题标题】:Redundant if statement?多余的if语句?
【发布时间】:2021-02-21 00:14:59
【问题描述】:

以下示例中的if 语句是否多余?

if (str[0] === ' ') {
  str = str.trimStart()
}

这对我来说似乎没有必要,因为trimStart() 似乎对开头没有空格的字符串没有任何负面影响。此外,如果字符串的开头确实有空格,则您运行的操作数量是需要的两倍。

在上述情况下,if 语句是否必要?

【问题讨论】:

    标签: javascript string performance trim


    【解决方案1】:

    if 不是必需的,但您应该将修剪后的值保存在某处,例如

    str = str.trimStart();
    

    -- 编辑--

    “'如果'有必要吗......?”

    您在原版中所做的测试是多余的。但是你可能想在调用 trimStart() 之前检查 str 有一个值和/或检查这个值是一个字符串,比如

    if (str && typeof str === 'string') ...
    

    【讨论】:

    • 它派生自一个input 元素,所以它总是有一个值。不过建议还是不错的
    【解决方案2】:

    if 块不是必需的,因为如果字符串的开头没有空格,trimStart 函数将不起作用。使用 if 语句对它没有任何影响,也不会真正带来任何真正的性能优势。

    【讨论】:

    • 我知道性能提升可以忽略不计,但您仍然需要运行两倍的操作
    • 如果字符串开头有空格,您只会运行两倍的操作,如果没有,则不会调用trimStart 函数。与 if 语句相比,调用函数确实有一些开销,但它们并没有真正产生任何有意义的差异。
    • 确实如此。但解决if 语句本身基本上就是一个操作。无论如何,现在我得到了答案。 ty
    【解决方案3】:

    鉴于已编辑的代码,在一种情况下if 语句可能很有用 - 如果字符串以换行符开头(算作空格,将被修剪),而不是纯空格。例如:

    const parseStr = (str) => {
      if (str[0] === ' ') {
        str = str.trimStart()
      }
      console.log(str.length);
    };
    parseStr('\nfoo');
    parseStr(' foo');
    parseStr('foo');

    如果trimStart 被无条件调用,则无论如何都会修剪换行符:

    const parseStr = (str) => {
      str = str.trimStart()
      console.log(str.length);
    };
    parseStr('\nfoo');
    parseStr(' foo');
    parseStr('foo');

    【讨论】:

    • 对不起,是的,另一个回答的人也指出了这一点。我编辑了 Q
    • 如果字符串以换行符开头可能会有所不同。有点奇怪,但并非不可能。
    • 非常感谢您的意见(没有双关语,哈哈)。我选择了其他人,因为他击败了你,尽管你的回答同样有用
    猜你喜欢
    • 2019-06-06
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多