【问题标题】:Why bother calling toString?为什么要麻烦调用 toString?
【发布时间】:2020-02-09 06:06:47
【问题描述】:

假设变量x 具有数值0.5

"cake" + x 将返回"cake0.5" 而不会抱怨。在Javascript代码中显式写"cake" + x.toString()有什么好处?我希望它被认为是更好的代码风格是明确的。但是我对JS不是很有经验。编写显式转换而不是让编译器弄清楚它是否更高效?

什么时候有理由省略显式转换?

【问题讨论】:

    标签: javascript types


    【解决方案1】:

    也许将两个操作数转换为相同类型是一种习惯,这对于类型化语言来说是强制性的。

    "cake" + x.toString()
    

    比考虑使用隐式强制更精确。代码的读者可以清楚地看到发生了什么。

    【讨论】:

    【解决方案2】:

    使用任何一种方法都可以。我见过工程师以两种方式编写它。

    在性能方面,这是一个可以忽略不计的差异,没有人会真正批评你使用其中一个或另一个。

    因此,无论您喜欢哪个,都可以使用。但是,很高兴知道两者都会产生相同的结果……这样当您在某人的代码中遇到它们中的任何一个时,您就会知道它的含义。

    【讨论】:

      【解决方案3】:

      没有真正的理由使用 toString() 而不是明确的。速度各不相同,但它真的微不足道(速度取决于浏览器)。

      【讨论】:

      • 我建议使用toString() 明确的选择。跳过它是依赖于隐式类型强制。
      【解决方案4】:

      包含它的主要原因是使您的代码更加明确。依赖隐式转换可能会使下一个阅读它的人更难理解代码——即使几周后你自己也是如此。如果我看到"cake" + x,我的第一个猜测是x 可能类似于"pan""mix"。我不会猜这是一个数字。

      【讨论】:

        【解决方案5】:

        在您的示例中,您可以使用省略 .toString() 方法。

        为什么要使用它?这取决于您的需求。此方法允许您将数字从基数 2 转换为基数 36:

        const myNumber = 32;
        myNumber.toString(2);   // Binary - returns 100000
        myNumber.toString(8);   // Octal - returns 40
        myNumber.toString(10);  // Decimal (default) - returns 32
        myNumber.toString(16);  // Hexadecimal - returns 20
        myNumber.toString(32);  // Triacontakaidecimal - returns 10
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-02-13
          • 1970-01-01
          • 2011-12-17
          • 2018-07-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多