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

时间:2014-06-12 12:41:27

标签: javascript json node.js

当我使用包含 {"test":1}的node.js执行文件时,会引发一个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

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

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

为什么?

1 个答案:

答案 0 :(得分:6)

{}形成block

test:是一个label,它是有效的(但由于没有循环,因此毫无意义)。

"test":是一个字符串,后跟冒号,这是无意义的。

var foo = {}{}置于不同的上下文中,因此它们形成object literal而不是块。在对象文字内,属性名称可以是标识符或字符串。


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