【问题标题】:What is `base value` of `reference` in ECMAScript(ECMA-262 5.1)?ECMAScript(ECMA-262 5.1)中`reference`的`base value`是什么?
【发布时间】:2015-03-30 18:08:37
【问题描述】:

我一直试图了解 this 值是如何在 javascript 中设置的,并且发现 ECMAScript 语言规范非常有用。我正在阅读 section 8.7 reference specification type 并发现 ECMAScript 中的引用由 3 个组件组成,base valuereferenced namestrict reference flag 以了解 section 11.2.3

我可以从他们的名字中假设referenced namestrict reference flag 是什么,但我不明白base value 是什么。该文件说base valueundefinedStringBooleanNumberObject,但它没有说明它是如何设置的以及它是什么。我猜它类似于上下文对象。谁能解释一下?

【问题讨论】:

  • 就像@shashank 指出的那样,this 从它引用的任何对象继承typeof。我相信 JS 中的所有变量都是Prototype Object
  • @Shashank:this 的值没有被转换,它不是一个特殊的对象或类型。 this 之所以特殊,是因为该值是直接从执行上下文引用的,而不是对应的环境记录。然而,该值就像任何其他值一样。这个问题实际上与this 无关。

标签: javascript ecmascript-5


【解决方案1】:

是的,基本值是引用名称所在的上下文。

对于对象属性,这将是对象(有关 setter/getter 操作,请参阅 §8.12 Object internal methods)。对于变量,这将是变量环境 (§10.2.1 Environment records)。对于无法解析的引用(引发引用错误except when supplied to typeof),这将是undefined

它没有说明它是如何设置的

Reference 值仅由极少数操作构成:

【讨论】:

  • 感谢您的回答。我有点开始明白了。我还阅读了Section 10.4.3,它说如果它是nullundefinedthis 的值设置为全局对象。那么还有一个问题,base value 是不是null
  • 请注意thisBinding 与参考值无关。 thisArg 只是调用者提供的一个值 - 在确实调用方法的情况下绝不是 null,但您也可以使用 .call(null)。不,永远不会以null 作为基值 构造引用。 null.xundefined.x do throw immediately,标识符引用只有 undefined 显式传递。
  • 基值何时是BooleanNumberString
  • @Taurus 当您访问原始值的属性时
  • @Taurus 不,它只有在评估引用时才会被装箱 (GetValue),而不是在构造引用时。不,这与引用值与原始值无关,请注意所有引用在调用之前都会对其值进行评估。
猜你喜欢
  • 1970-01-01
  • 2013-12-30
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 1970-01-01
  • 1970-01-01
  • 2014-02-04
  • 1970-01-01
相关资源
最近更新 更多