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

标签 javascript json

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/

相关文章:

javascript - 无法生成体素球体

javascript - 仅匹配一组

ios - 将 JSON 解析为核心数据

json - Grails Controller : Render String as JSON Response

javascript - RegEx JS 从另一个字符串中提取字符串匹配条件

javascript - 单页应用程序中的登录页面

json - 亚马逊社交网络 : JSON toasts to Windows Phones

javascript - 如何通过身份验证正确调用此 API? [ python /JSON]

json - 使用Elephant Bird jsonLoader时Pig Job挂起

Javascript对数组进行两次排序