我尝试了其中几个,
\nconst obj = {\n \'`\' : 1,\n \'@\' : 2,\n \'^\' : 3,\n \'-\' : 4,\n \'?\' : 5,\n \']\' : 6,\n \'*\' : 8,\n \')\' : 9,\n \'/\' : 10,\n \'>\' : 11,\n \'\xe3\x83\xab\': 12\n}\n\nconsole.log(obj); //{ \'`\': 1,\xe2\x80\x88\'@\': 2,\xe2\x80\x88\'^\': 3,\'-\': 4,\xe2\x80\x88\'?\': 5,\xe2\x80\x88\']\': 6,\xe2\x80\x88\'*\': 8,\xe2\x80\x88\')\': 9,\xe2\x80\x88\'/\': 10,\xe2\x80\x88\'>\': 11, \'\xe3\x83\xab\': 12}\nRun Code Online (Sandbox Code Playgroud)\n所以我的问题是,可以作为 JavaScript 对象中的键的字符超集(单独而不是它们的组合,这显然是愚蠢的)是什么?
\n已编辑 ---- \n绝对不是重复的!不知道为什么它仍然如此标记!\n我已经有人将 JSON 与 JavaScript 对象进行比较,并从中得出答案。\n我确实理解JSON 键名称中哪些字符有效/无效?有一些很好的见解。
\n但是要讨论 JSON 和 JavaScript“键”之间的比较是否允许或禁止一些事情,纯粹是记住这些键是否允许输入,那么null、undefined怎么样?
\n我没有深入了解它们如何在内部强制并作为键插入,或者在使用方括号[ ]表示法检索值时发生什么强制。纯粹基于是否允许您输入该值,是的,JSON 中允许的键与 JavaScript 对象中允许的键之间存在差异。
\nnull 作为 JavaScript 对象中的键
\nlet x = {null: 10};\nfor(let key in x){\n console.log(key); //null\n console.log(typeof key); //string\n}\nRun Code Online (Sandbox Code Playgroud)\n作品
\nnull 作为 JSON 中的键
\n{\n null: 10\n}\nRun Code Online (Sandbox Code Playgroud)\n不起作用
\n任何字符串都可以作为对象键。从规格来看:
属性使用键值来标识。属性键值可以是 ECMAScript 字符串值或符号值。所有 String 和 Symbol 值(包括空 String)都是有效的属性键。属性名称是一个属性键,它是一个字符串值。