4

我有这个代码:

var boo = 123123;

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

更快

var foo = boo + ""; 

较慢

var foo = boo.toString(); 

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

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

4

1 回答 1

4

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

那么为什么实际上一个比另一个慢呢?这是因为在toStringV8 中将再调用一次 C 函数。您可以尝试自己查看以下内容:

  • 在 chrome 中打开空标签(以避免已打开页面的任何副作用)
  • 打开开发者工具
  • 打开配置文件选项卡并开始新的配置文件
  • 转到控制台选项卡并插入script1脚本,按 Enter。
  • 再次转到 Profile 并停止分析
  • 重复相同的script2

  • 脚本1:var boo = 123123; var foo = boo + "";

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

在我的情况下,首先将导致下一个堆栈跟踪:

  InjectedScript.evaluate
    InjectedScript._evaluateAndWrap

而第二个:

  InjectedScript.evaluate
    InjectedScript._evaluateAndWrap
      InjectedScript._evaluateOn
        evaluate

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

于 2013-02-17T08:06:52.820 回答