gpt4 book ai didi

javascript - 对原型(prototype)链、原语和对象的困惑

转载 作者:行者123 更新时间:2023-11-30 13:05:57 24 4
gpt4 key购买 nike

在 Firebug 控制台中:

>>> a=12 
12
>>> a.__proto__
Number {}
>>> (12).__proto__
Number {}
>>> a.constructor.prototype === (12).__proto__
true
>>> a.constructor.prototype.isPrototypeOf(a)
false

与其他几行相比,最后一行让我很困惑。另见 Constructor.prototype not in the prototype chain?

最佳答案

当您将 . 运算符与原语一起使用时,语言会使用适当的对象类型(在本例中为 Number)自动将其装箱。这是因为 JavaScript 中的简单原始类型实际上不是 Object 实例。

因此,实际的左侧

a.__proto__

不是数字 12 而本质上是 new Number(12)。但是,变量“a”仍然是简单的数值 12

编辑Section 8.7 of the spec用典型的 ECMA 262 月亮语言“解释”这一点。我找不到一个清晰的段落来描述原始 baseValue 被视为数字、 bool 值或字符串实例的方式,但该部分直接暗示了这一点。我认为因为那些非原始合成值是短暂的(它们只是“真实的”,而 .[] 表达式正在被评估)规范只是在谈论关于行为,而不明确要求构造一个实际的 Number。不过我是在猜测。

关于javascript - 对原型(prototype)链、原语和对象的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15705232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com