为什么concat空字符比.toString()更快?

时间:2013-02-17 07:04:18

标签: javascript performance algorithm optimization

我有这段代码:

var boo = 123123;

我想将该数字转换为字符串,而 conact string 比原生JavaScript .toString()更快:

更快

var foo = boo + ""; 

var foo = boo.toString(); 

jsPerf:http://jsperf.com/concat-string-vs-tostring

为什么 .toString()比判断空字符慢?最后我想知道使用+ ""技术而不是.toString()的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

结果会因使用的javascript引擎而异。在Chrome上,我得到的结果与Afshin相同。

那么为什么一个比另一个慢呢?这是因为在toString上将再次调用V8中的C函数。你可以尝试下一步看看:

  • 在chrome中打开空标签(以避免已打开页面的任何副作用)
  • 打开开发人员工具
  • 打开“个人资料”标签并启动新个人资料
  • 转到“控制台”标签并插入script1脚本,然后按Enter键。
  • 再次转到个人资料并停止分析
  • 使用script2

  • 重复相同的操作
  • 脚本1:var boo = 123123; var foo = boo + "";

  • 脚本2:var boo = 123123; var foo = boo.toString();

在我的情况下,首先会导致下一个stacktrace:

  InjectedScript.evaluate
    InjectedScript._evaluateAndWrap

而第二个:

  InjectedScript.evaluate
    InjectedScript._evaluateAndWrap
      InjectedScript._evaluateOn
        evaluate

我认为它更多地与引擎内部结构有关,而不是官方的js规范,可能可以优化使用相同的代码路径。