参见英文答案 >
why {key:value}[“key”] doesn’t work?1个
如果在Chrome控制台中我运行了正确的JSON:
如果在Chrome控制台中我运行了正确的JSON:
{"aaa":"bbb"}
我明白了:
SyntaxError: Unexpected token :
但是,如果我运行例如:
{aaa:"bbb"}
它不会抱怨.在下面运行也很好:
aaa={"aaa":"bbb"}
解决方法
问题是由语法/解析上下文引起的.
给定{“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工具和验证.