【问题标题】:toString or to parseInt javascripttoString 或 to parseInt javascript
【发布时间】:2012-12-18 13:25:29
【问题描述】:

所以今天我遇到了这种情况。我有一个整数和一个需要比较的字符串。为了比较两者,我要么必须 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 声明为我知道的字符串(因为它不用于计算),那将是最好的。但它在网站上随处可见。

【问题讨论】:

  • 确保在调用 parseInt 时设置基数,否则如果您的字符串是 '07',它将被解释为八进制
  • 注意 parseInt($num, 10) 的第二个参数。你想将整数解析为十进制、十六进制、八进制还是什么?对于十进制,使用“10”作为第二个参数的值。这不是默认设置。

标签: javascript casting tostring parseint


【解决方案1】:

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

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

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

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

true

【讨论】:

  • 呵呵,这是一个全新的维度。但是在我的情况下,字符串前面永远不会有 0。但是非常有效的观点。
【解决方案2】:

两者的性能有什么不同吗?

不明显。但是,这两种方法之间存在行为差异,因为parseInt 也会将诸如0011xyz 之类的字符串转换为数字1。你想要那个吗?如果没有,你应该将整数字符串化。

顺便说一句,如果您只使用== operator,则字符串将隐含为ToNumbered。这不允许仅以某些数字开头的字符串(如1xyz),但任何与1 等价的数字表示形式,例如1.0001

【讨论】:

    【解决方案3】:

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

    【解决方案4】:

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

    【讨论】:

    • 这不是 100% 正确的。 "1" == 1; // true"1" === 1; // false 在比较两种不同的类型时,您确实需要将它们转换为相同的类型才能 100% 确定它们是偶数。 read here
    • @rlemon 我认为您实际上只是证明了它在这里按预期工作,因为它进行的是文字比较而不是类型比较,使用== 时应该是正确的,因为'1' 确实@987654326 @1.
    • 是的,但它并不隐含在语义上(即它可能会让后来的开发人员感到困惑)。 OP 应该转换类型并使用完全相等。
    • @rlemon 我认为这有点让很多新开发者看起来很糟糕,如果有人不知道===== 之间的区别,那么他们就有一个严重的问题,尤其是如果他们认为他们可以编写 javascript 并且不应该让他们靠近任何此类系统。我的意思不是说你不应该施放,但同时...
    【解决方案5】:

    试试这个

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

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

    var intI = 1+"";//now check the type of intI, it would be string
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      • 2018-03-11
      • 2020-09-15
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多