我对引擎的理解是,当涉及到文字时,无论何时在文字上调用方法,它都会实际实例化一个新的临时对象。
所以要么我的理解是错的,要么结果需要解释: http://jsperf.com/literal-vs-object-231
答案 0 :(得分:3)
只要调用方法
,它就会实际实例化一个新的临时对象
嗯,是的,这就是如何指定对原始值的方法调用。但是,它仅用于解释行为(因为它是一种描述属性查找应如何最终在本机原型上的简单方法),而不是告诉它实际上是如何实现的(对String.prototype
的静态访问,不涉及临时对象)。
为什么字符串文字比字符串对象更快?
那么引擎对字符串文字的作用是什么?它们是常数。他们的类型是已知的。财产访问 - 我们知道会发生什么。等等,有人对结果做了什么吗?为什么要调用无副作用的功能呢?
您会看到这会导致:优化。 Don't be fooled by the compiler on microbenchmarks
答案 1 :(得分:0)
浏览器可以并且将优化本机字符串方法。调用String.toUpperCase()
在文字上更快,因为JS引擎足够智能,只提供大写字符串而不进行不必要的纠正。
如果你提供一个自定义方法调用它,对象就更快了,至少在Chrome上(这在很大程度上取决于JS引擎),因为引擎没有针对它的优化策略。请参阅http://jsperf.com/literal-vs-object-231/2。