这两段代码,都用 curly braces 来包裹内容,
let lorem = {
ipsum: {
go (v) {
return;
}
}
};
lorem: {
ipsum: {
function go () {
if (v === void 0) break lorem;
}
}
}
第一个 ipsum 是 plainObject,第二个 ipsum 是一个 label。 会不会有极端条件,会让 JS 无法区分这两个?
1
bombless 2017-06-28 12:46:13 +08:00 via Android
对象字面量中哪来的 label
|
2
e8c47a0d OP ipsum: 相当于其他语言用 goto 可以跳转的标签,ipsum: 后面的花括号 {} 是一个 block (代码块),两者无关系。
|
3
guokeke 2017-06-28 17:57:53 +08:00
感觉你第二个语法错误啊。。label 要写在外面吧
|
4
guokeke 2017-06-28 18:34:25 +08:00
```
lorem: { ipsum: { function go (v) { return v === void 0; } if (go()) break lorem; } } ``` |
6
chairuosen 2017-06-28 19:07:01 +08:00
第二种写法是从哪看的? JS 里没这种写法
|
7
TYchen 2017-06-28 19:10:03 +08:00
么见过- -。。。
|
8
bumz 2017-06-28 19:17:02 +08:00 1
不存在这样的条件
因为只有在一个 statement 最开头的 { 会被识别为 statement group 其它 { 会被识别为 object literal 只有 object literal 中的 identifier: 会被识别为属性的定义,其它 identifier: 会被识别为标签。 |
9
ghostheaven 2017-06-28 19:17:39 +08:00 via Android
如果语法上没有歧义,那就没有问题,有歧义的话语法解析会自动选择一种方式消除歧义,如果不能消除就是语法错误。
|
11
e8c47a0d OP @guokeke 原来你是说这个啊,改成函数忘记去掉了,那行没有意义。
@chairuosen 第二段的 lorem: 和 ipsum: 都是标签,{} 是代码块,这个写法是把标签和代码块写在一起,所以会有点混淆。但这么写的好处是,方便折叠归类(比如 atom )。 |