为什么属性名称中的引号会引发错误?

Mic*_* M. 1 javascript json node.js

当我执行一个 包含node.js的文件时{"test":1},会引发一个SyntaxError:

(function (exports, require, module, __filename, __dirname) { {"test":1}
                                                                     ^
SyntaxError: Unexpected token :
    at Module._compile (module.js:439:25)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:902:3
Run Code Online (Sandbox Code Playgroud)

但是{test:1}(没有引号)或var t = {"test":1}工作正常.

我执行包含运行代码的文件:node test.js.

为什么?

Que*_*tin 6

{}形成一个.

test:是一个有效的标签(但由于没有循环,因此毫无意义).

"test": 是一个字符串,后跟一个冒号,这是无稽之谈.

var foo = {}将它{}放在不同的上下文中,因此它们形成一个对象文字而不是一个块.在对象文字内,属性名称可以是标识符或字符串.


您的test.js内容看起来像JSON,而不是JavaScript.执行它没有任何意义,因为它没有任何事情.

  • ES5的相关部分是[第12.4节](http://ecma-international.org/ecma-262/5.1/#sec-12.4). (2认同)