
这两段代码,都用 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 不存在这样的条件 因为只有在一个 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 )。 |