ECMAScript(ECMA-262 5.1)中,“引用(reference)”的“基值(base value)”是什么?

11
我一直在尝试理解javascript中的this值是如何设置的,并发现ECMAScript语言规范非常有帮助。我正在阅读第8.7节引用规范类型,并发现ECMAScript中的引用由3个组件基础值引用名称严格引用标志组成,以了解第11.2.3节

我可以从它们的名称推断出引用名称严格引用标志,但我不明白基础值是什么。文件说基础值undefinedStringBooleanNumberObject中的任何一个,但它没有说明它是如何设置的或者它是什么。我猜它类似于上下文对象。有人能解释一下吗?


就像@shashank指出的那样,this继承了它所引用的任何对象的typeof。我相信JS中的所有变量都是Prototype Object - RenaissanceProgrammer
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Felix Kling
1
http://perfectionkills.com/know-thy-reference/ - kangax
1个回答

6
是的,基础值是所引用名称所在的上下文。
对于对象属性,这将是对象(请参见§8.12 Object internal methods以获取setter/getter操作)。对于变量,这将是变量环境(§10.2.1 Environment records)。对于无法解析的引用(那些抛出引用错误除非提供给typeof),这将是undefined

它没有说明如何设置

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

谢谢你的回答。我开始有点理解了。我还阅读了第10.4.3节,它说如果this值为nullundefined,则将其设置为全局对象。所以我还有一个问题,是否存在base valuenull的情况? - ringord
1
请注意,thisBinding 与引用值无关。 thisArg 只是由调用者提供的一个值 - 在方法调用的情况下从不为 null,但您也可以使用 .call(null)。不,引用永远不会使用 null 作为基本值构造。 null.xundefined.x 会立即抛出异常,标识符引用仅显式传递 undefined - Bergi
基础值何时为 BooleanNumberString - doubleOrt
@Taurus 当您访问原始值上的属性时 - Bergi
2
@Taurus 不,它仅在引用被评估(GetValue)时才会被装箱,而不是在引用构造时。并且不,这与引用值 vs 基本值无关,注意所有引用在调用之前都被评估为它们的值。 - Bergi
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接