鉴于这两个例子:
var myNumber = 10; //primitive
和
var myNumber = new Number(10); //object
发生类型转换时哪个执行得更快?
var myString = myNumber.toString(); //convert to string
我假设对象类型转换更快,因为原语被转换为对象以响应表达式,然后再次返回原语。
鉴于这两个例子:
var myNumber = 10; //primitive
和
var myNumber = new Number(10); //object
发生类型转换时哪个执行得更快?
var myString = myNumber.toString(); //convert to string
我假设对象类型转换更快,因为原语被转换为对象以响应表达式,然后再次返回原语。
类型转换的原始数字是最快的。
我将总结优秀的评论来回答。感谢 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()
或者+""
取决于您发现更容易阅读的内容。