Javascript 为什么字符串文字比字符串对象快?

Javascript 为什么字符串文字比字符串对象快?,javascript,benchmarking,Javascript,Benchmarking,我对引擎的理解是,当涉及到文本时,每当对文本调用方法时,它实际上会实例化一个新的临时对象 因此,要么我的理解是错误的,要么结果需要解释: 浏览器可以并将优化本机字符串方法。在文本上调用String.toUpperCase()的速度更快,因为JS引擎足够智能,只提供大写字符串,而不进行不必要的转换 如果您提供一个自定义方法,那么在对象上调用它会更快,至少在Chrome上更快(这在很大程度上取决于JS引擎),因为引擎没有针对它的优化策略。看 每当调用一个方法时,它实际上会实例化一个新的临时对象 好的

我对引擎的理解是,当涉及到文本时,每当对文本调用方法时,它实际上会实例化一个新的临时对象

因此,要么我的理解是错误的,要么结果需要解释:

浏览器可以并将优化本机字符串方法。在文本上调用
String.toUpperCase()
的速度更快,因为JS引擎足够智能,只提供大写字符串,而不进行不必要的转换

如果您提供一个自定义方法,那么在对象上调用它会更快,至少在Chrome上更快(这在很大程度上取决于JS引擎),因为引擎没有针对它的优化策略。看

每当调用一个方法时,它实际上会实例化一个新的临时对象

好的,是的,这就是对原语值的方法调用的指定方式。但是,它仅用于解释行为(因为这是一种简单的方法,可以描述如何在本机原型上查找属性),而不是说明它实际是如何实现的(静态访问
String.prototype
,不涉及临时对象)

为什么字符串文字比字符串对象快

那么引擎如何处理字符串文本呢?它们是常数。他们的类型是已知的。我们知道会发生什么。等等,有人对结果做了什么吗?为什么要调用一个没有副作用的函数呢


您可以看到这将带来什么:优化

测试没有显示任何内容,因为它工作不正常。您应该将初始化放在初始化块中,不要循环应该测量的代码。测试引擎执行循环。如果不捕获输出,就无法判断JS内核是否在欺骗和跳过您期望它完成的工作。