4

所以今天我遇到了这个场景。我有一个整数和一个需要比较的字符串。为了比较两者,我要么必须 toString() 整数,要么将字符串解析为 int。

这是我的问题,我应该选择哪一个,两者的性能有什么不同吗?(即使是最小的)有经验法则吗?

这是一个代码示例:

var intI = 1;
var stringS = '1';

if (intI.toString() == stringS)
console.log('are equal');

//Or
if (intI == parseInt(stringS))
console.log('are equal');

最好将 Integer 声明为我知道的字符串(因为它不用于计算)。但它在网站上随处使用。

4

5 回答 5

12

这取决于您想要的语义而不是性能。字符串“001”是否应该等于数值1?如果答案是“是”,您应该将值转换为数字。如果不是,那么您应该将其作为字符串进行比较。

除非您有一个正在执行数百万次此类操作的应用程序,否则不要担心此类琐碎事情的性能。

另请注意,parseInt()不关心一串数字末尾是否有尾随垃圾。那是

parseInt("123skidoo", 10) === 123

true

于 2012-12-18T13:27:45.763 回答
1

两者的性能有什么区别吗?

不引人注目。但是,这两种方法之间存在行为差异,parseInt也可以将诸如001or1xyz之类的字符串转换为 number 1。你想要那个吗?如果没有,你应该 toString 整数。

顺便说一句,如果你只使用==operator,字符串将被隐式ToNumber编辑。这不允许仅以某些数字开头的字符串 (as 1xyz),但任何与 so 等价的数字表示形式,1例如1.0or 001

于 2012-12-18T13:30:12.637 回答
0

实际上,在这种情况下,您不必转换任何内容。当您将整数与字符串进行比较时,Javascript 引擎会自动将一个整数转换为另一个。您可以通过javascript:alert(1 == '1');在 Web 浏览器导航栏中输入来进行尝试。它将返回“真”。

于 2012-12-18T13:29:53.123 回答
0

您不需要进行任何显式转换,因为默认情况下 javascript 会为您处理它。它还取决于您要比较的语义。我认为我们不应该担心在这种微不足道的情况下的表现。

于 2012-12-18T13:30:28.067 回答
0

尝试这个

var intI = 1;
var stringS = '1';

将 intI 转换为字符串只需使用以下内容。

var intI = 1+"";//now check the type of intI, it would be string
于 2012-12-27T15:29:07.333 回答