为什么字符串文字比字符串对象快?
Why is a string-literal faster than a String-object?
我对引擎的理解是,当涉及到字面量时,它实际上会在字面量上调用方法时实例化一个新的临时对象。
所以要么我的理解有误,要么结果需要解释一下:
http://jsperf.com/literal-vs-object-231
浏览器可以并且将会优化本机字符串方法。在文字上调用 String.toUpperCase()
更快,因为 JS 引擎足够聪明,只提供大写字符串而不进行不必要的转换。
如果您提供自定义方法调用它在对象上会更快,至少在 Chrome 上(这在很大程度上取决于 JS 引擎),因为引擎没有针对它的优化策略。参见 http://jsperf.com/literal-vs-object-231/2。
it will actually instantiate a new temporary object whenever a method is called
嗯,是的,这就是指定对原始值的方法调用的方式。但是,它仅用于 解释 行为(因为它是描述属性查找应如何在本机原型上结束的简单方法),而不是说明它实际上如何 实现(对String.prototype
的静态访问,不涉及临时对象)。
Why is a string-literal faster than a String-object?
那么引擎如何处理字符串文字?他们是常数。他们的类型是已知的。 属性 访问 - 我们知道会发生什么。等等,有人对结果做任何事情吗?为什么要调用无副作用的函数?
你看这会导致什么:优化。 Don't be fooled by the compiler on microbenchmarks.
我对引擎的理解是,当涉及到字面量时,它实际上会在字面量上调用方法时实例化一个新的临时对象。
所以要么我的理解有误,要么结果需要解释一下: http://jsperf.com/literal-vs-object-231
浏览器可以并且将会优化本机字符串方法。在文字上调用 String.toUpperCase()
更快,因为 JS 引擎足够聪明,只提供大写字符串而不进行不必要的转换。
如果您提供自定义方法调用它在对象上会更快,至少在 Chrome 上(这在很大程度上取决于 JS 引擎),因为引擎没有针对它的优化策略。参见 http://jsperf.com/literal-vs-object-231/2。
it will actually instantiate a new temporary object whenever a method is called
嗯,是的,这就是指定对原始值的方法调用的方式。但是,它仅用于 解释 行为(因为它是描述属性查找应如何在本机原型上结束的简单方法),而不是说明它实际上如何 实现(对String.prototype
的静态访问,不涉及临时对象)。
Why is a string-literal faster than a String-object?
那么引擎如何处理字符串文字?他们是常数。他们的类型是已知的。 属性 访问 - 我们知道会发生什么。等等,有人对结果做任何事情吗?为什么要调用无副作用的函数?
你看这会导致什么:优化。 Don't be fooled by the compiler on microbenchmarks.