微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JavaScript Object表示法是否适合JSON?

参见英文答案 > why {key:value}[“key”] doesn’t work?1个
如果在Chrome控制台中我运行了正确的JSON:
{"aaa":"bbb"}

我明白了:

SyntaxError: Unexpected token :

但是,如果我运行例如:

{aaa:"bbb"}

它不会抱怨.在下面运行也很好:

aaa={"aaa":"bbb"}

我认为正确的JSON必须有用引号括起来的属性名称,为什么会发生这种情况呢? JS对象表示法不是正确的JSON吗?

解决方法

问题是由语法/解析上下文引起的.

给定{“aaa”:“bbb”}作为程序,这是一个Block [statement],其中“aaa”是一个字符串,后跟一个冒号,因此是无效的语法.它可以最低限度地复制为:“aaa”:“bbb”,因为括号什么也没做,只会增加混乱.

给定{aaa:“bbb”}作为程序,这是一个声明,其中aaa(标识符)是Label,后跟字符串“bbb”(也在语句上下文中).它很好,但它不会返回一个对象.同样,它等同于语句上下文中的aaa:“bbb”.

给定aaa = {“aaa”:“bbb”}作为程序,现在{…}在表达式上下文中被解析并被视为Object Literal;生成的对象将分配给变量.可以使用其他语法结构强制表达式上下文,例如{“aaa”:“bbb”},({“aaa”:“bbb”}),或者更有用的是,console.log({“aaa”:“bbb” “}).

尽管如此,因为JavaScript Object Literal语法根本不适用于三种情况中的两种:

JSON是almost-but-not-quite JavaScript对象文字的正确子集;使用适当的JSON工具和验证.

原文地址:https://www.jb51.cc/js/156235.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐