使用点表示法和空格访问对象键

I_D*_*ing 0 javascript

我遇到了以下情况:

var object = {};
object.name = 'ABC';
console.log(object.     name); // this is still valid
Run Code Online (Sandbox Code Playgroud)

注意后面的空格 object.

为什么这个有效?这有ECMA规范吗?

对于不同数据类型的所有继承属性也是如此.

我在节点终端上测试了这个.

谢谢!

T.J*_*der 7

为什么这个有效?

因为whitespace 在JavaScript语法中很大程度上(尽管不完全)不相关.您可以安全地在两个标记之间插入除换行符之外的任何空格(并且在大多数情况下,但不是所有情况下,您也可以插入换行符;"最"是由于ASI).你不能在标记中插入空格(因为它将它们分成两个标记),但你可以在标记之间.

正如Federico klez Culloca指出的那样(链接),.是一个运营商,就像+或*.事实上我们通常不会在它周围放置空格,但确实在它们周围放置空格,这简直就是惯例.

这些都是有效的:

console.log(object.name);
console.log(
    object.name
);
console.log(
    object . name
);
console.log(
    object
    .
    name
);
Run Code Online (Sandbox Code Playgroud)

这有ECMA规范吗?

当然,规范本身.具体在这里和这里.从最后一个链接:

除了空格和注释之外的输入元素构成ECMAScript的句法语法的终端符号,并且被称为ECMAScript标记.这些标记是ECMAScript语言的保留字,标识符,文字和标点符号.此外,行终止符虽然不被认为是令牌,但也成为输入元素流的一部分,并指导自动分号插入的过程(11.9).简单的空格和单行注释将被丢弃,并且不会出现在语法语法的输入元素流中.