JavaScript如何临时将字符串原语视为字符串构造函数的实例?

JavaScript如何临时将字符串原语视为字符串构造函数的实例?,javascript,Javascript,我知道您可以对字符串原语执行String属性,因为JavaScript临时将字符串原语视为String的实例: n=“字符串”; n2=n.toUpperCase(); 控制台日志(n2)您可以实例化内置字符串对象,然后应用任何字符串方法。例如: let str=新字符串('stringPrimitive')) console.log(str) console.log(str.split(“”))此行为的术语是 理论上,它确实做到了——创建一个新的字符串对象,并使用它。然而,应该注意的是,在

我知道您可以对字符串原语执行
String
属性,因为JavaScript临时将字符串原语视为
String
的实例:

n=“字符串”;
n2=n.toUpperCase();

控制台日志(n2)您可以实例化内置字符串对象,然后应用任何字符串方法。例如:

let str=新字符串('stringPrimitive'))
console.log(str)

console.log(str.split(“”))
此行为的术语是

理论上,它确实做到了——创建一个新的字符串对象,并使用它。然而,应该注意的是,在现实中,引擎内部可以采取许多捷径,并进行许多优化

阅读的规范时,您可以在步骤中看到此框(如果是原语,请使用
ToObject(base)
),以及有关允许优化的明确说明:

在上述抽象操作和普通对象[[Get]]内部方法之外,无法访问在步骤5.a.ii中创建的对象。实现可能会选择避免实际创建对象


因此,要知道真正发生了什么,您可能需要阅读相关引擎的代码。对于普通的javascript程序员来说,了解引擎的内部结构是不必要的,但是如果你想知道,例如V8是开源的(用c++编写的)。

谢谢@sonEtLumiere,我编辑了我的问题。我希望知道当JS返回字符串原语的属性/方法时,它在幕后做了什么。谢谢@ASDFGerte,我将留下它,相信引擎内部!这里的问题是关于属性访问的,这对程序员来说并不太相关。然而,您需要关心装箱的一个地方是,在非严格模式下,通过调用、绑定或应用将原语作为
this
传递给函数(这是一种奇怪的情况,使用非严格是一个很大的禁忌)。提供有关整个主题的一些附加信息。它已经有几年历史了,但大部分可能仍然相关。