javascript - js 中奇怪的 JSON 解析行为, "Unexpected token

如 this jsfiddle 中所示, 如果你有一个 JS 文件并且你创建了一个 JSON 对象而不使用它,它的行为会有所不同,具体取决于键(成员)是否用引号括起来。

有效代码:{ a: 1};
无效代码:{ "a": 1 };

您将收到一条错误消息(在 Chrome 中,FF/IE 不同,但语法仍然失败)

Uncaught SyntaxError: Unexpected token :

但如果你以某种方式使用该对象,例如:alert({ "a": 1 }); 一切都会再次正常。

为什么会这样?

最佳答案

声明:

{ a: 1 };

不是对象字面量。这是一个 block 语句,其中有一个标记表达式。有效。

这个:

{ "a": 1 };

是一个语法错误,因为它是不可解析的。带引号的“a”在 block 内开始一个表达式语句,但字符串后面的下一个标记是冒号,并且没有看起来像表达式后跟冒号的表达式形式。

现在:

var x = { "a": 1 };

有效,因为“{”不被解释为 block 语句的开始。该语句以 var 开头,因此它是一个变量声明。在“=”标记右侧的表达式中,“{”唯一可以表示的是对象字面量的开头。同样,请注意:

({ "a": 1 });

没问题,因为左括号使解析器期望嵌套子表达式,因此“{”再次明确表示它是对象文字的开头。

关于javascript - js 中奇怪的 JSON 解析行为, "Unexpected token :",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10080551/

相关文章:

ruby-on-rails - 销毁记录时应该渲染什么?

jquery - AJAX 将 JavaScript 字符串数组发布到 JsonResult 作为

php - 使用 json_encode() 时删除数组索引引用

json - 简单、安全的 API 认证系统

asp.net-mvc - 如何从 MVC Controller 返回 Json 对象以查看

json - Jackson JSON Marshall 忽略 getter

json - 应该如何为 RESTful JSON 集合实现 HATEOAS 样式的链接?

javascript - 如何转换为 D3 的 JSON 格式?

json - 在 node package.json 中,使用额外参数从另一个脚本调用脚本,在这种情

java - 可以将 Jackson 配置为从所有字符串属性中修剪前导/尾随空格吗?