7

鉴于这两个例子:

var myNumber = 10; //primitive

var myNumber = new Number(10); //object

发生类型转换时哪个执行得更快?

var myString = myNumber.toString(); //convert to string

我假设对象类型转换更快,因为原语被转换为对象以响应表达式,然后再次返回原语。

4

2 回答 2

1

类型转换的原始数字是最快的。

http://jsperf.com/num-type-conversion

于 2013-01-11T00:08:46.340 回答
1

我将总结优秀的评论来回答。感谢 theSystem、RocketHazmat、pst、bfavaretto 和 Pointy!

哪个性能更快?我假设...</p>

你只能测试,测试,测试。jsPerf是一个不错的选择。测试表明,与空字符串连接的原始值是迄今为止最快的方法 - 函数调用成本很高。如果变量没有被缓存而是每次都实例化(由 Geuis 测试),则尤其如此。

对象类型转换更快,因为原语被转换为对象以响应表达式,然后再次返回原语

这只是 EcmaScript 规范描述的行为(第 8.7.1节,第 9.8 节),而不是当前引擎所做的。它们不会产生任何对象开销,而是仅使用内部原始值。不要相信规范中的步骤数!

但是,不调用Number.prototype.toString函数(第15.7.4.2 节)——即使它是本机的——而是ToString通过addition运算符直接调用(第 11.6.1 节第 7 节)会更快。

一般来说,不要试图过早地优化,但只有当你真的遇到性能问题时(你几乎不会从这段代码中)。因此,为了简单起见,使用原始值,.toString()或者+""取决于您发现更容易阅读的内容。

于 2013-01-11T01:08:37.423 回答