javascript 对象中允许作为“键”的有效字符/值是什么?

Sud*_*ary 7 javascript object

我尝试了其中几个,

\n
const 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}\n
Run Code Online (Sandbox Code Playgroud)\n

所以我的问题是,可以作为 JavaScript 对象中的键的字符超集(单独而不是它们的组合,这显然是愚蠢的)是什么?

\n

已编辑 ---- \n绝对不是重复的!不知道为什么它仍然如此标记!\n我已经有人将 JSON 与 JavaScript 对象进行比较,并从中得出答案。\n我确实理解JSON 键名称中哪些字符有效/无效?有一些很好的见解。

\n

但是要讨论 JSON 和 JavaScript“键”之间的比较是否允许或禁止一些事情,纯粹是记住这些键是否允许输入,那么nullundefined怎么样?

\n

我没有深入了解它们如何在内部强制并作为键插入,或者在使用方括号[ ]表示法检索值时发生什么强制。纯粹基于是否允许您输入该值,是的,JSON 中允许的键与 JavaScript 对象中允许的键之间存在差异

\n

null 作为 JavaScript 对象中的键

\n
let x = {null: 10};\nfor(let key in x){\n    console.log(key); //null\n    console.log(typeof key); //string\n}\n
Run Code Online (Sandbox Code Playgroud)\n

作品

\n

null 作为 JSON 中的键

\n
{\n    null: 10\n}\n
Run Code Online (Sandbox Code Playgroud)\n

不起作用

\n

Cha*_*man 9

任何字符串都可以作为对象键。从规格来看

属性使用键值来标识。属性键值可以是 ECMAScript 字符串值或符号值。所有 String 和 Symbol 值(包括空 String)都是有效的属性键。属性名称是一个属性键,它是一个字符串值。

  • 这绝对不是重复的 - 至少它不是引用 JSON 的任何答案的重复。除了使用 null 作为键之外,undefined、true 或 false 又如何呢?在某些语言中,您可以使用数组或对象作为键,那些呢?(我认为你不能在 JavaScript 中做到这一点)。这是一个合理的问题,与 JSON 无关。遗憾的是,如果您使用 null、true 或 false 作为键,JavaScript 会允许这样做,但会将值转换为字符串(太糟糕了!)。因此,如果您设置 obj[true] = 42,那么您会发现 obj['true'] 设置为 42。 (7认同)