【发布时间】:2020-02-09 06:06:47
【问题描述】:
假设变量x 具有数值0.5。
"cake" + x 将返回"cake0.5" 而不会抱怨。在Javascript代码中显式写"cake" + x.toString()有什么好处?我希望它被认为是更好的代码风格是明确的。但是我对JS不是很有经验。编写显式转换而不是让编译器弄清楚它是否更高效?
什么时候有理由省略显式转换?
【问题讨论】:
标签: javascript types
假设变量x 具有数值0.5。
"cake" + x 将返回"cake0.5" 而不会抱怨。在Javascript代码中显式写"cake" + x.toString()有什么好处?我希望它被认为是更好的代码风格是明确的。但是我对JS不是很有经验。编写显式转换而不是让编译器弄清楚它是否更高效?
什么时候有理由省略显式转换?
【问题讨论】:
标签: javascript types
也许将两个操作数转换为相同类型是一种习惯,这对于类型化语言来说是强制性的。
"cake" + x.toString()
比考虑使用隐式强制更精确。代码的读者可以清楚地看到发生了什么。
【讨论】:
使用任何一种方法都可以。我见过工程师以两种方式编写它。
在性能方面,这是一个可以忽略不计的差异,没有人会真正批评你使用其中一个或另一个。
因此,无论您喜欢哪个,都可以使用。但是,很高兴知道两者都会产生相同的结果……这样当您在某人的代码中遇到它们中的任何一个时,您就会知道它的含义。
【讨论】:
没有真正的理由使用 toString() 而不是明确的。速度各不相同,但它真的微不足道(速度取决于浏览器)。
【讨论】:
toString() 是明确的选择。跳过它是依赖于隐式类型强制。
包含它的主要原因是使您的代码更加明确。依赖隐式转换可能会使下一个阅读它的人更难理解代码——即使几周后你自己也是如此。如果我看到"cake" + x,我的第一个猜测是x 可能类似于"pan" 或"mix"。我不会猜这是一个数字。
【讨论】:
在您的示例中,您可以使用省略 .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
【讨论】: