Javascript对象强制引用密钥

时间:2017-01-30 00:59:52

标签: javascript json

许多问题都在询问

之间的区别
obj = {"foo" : "bar"} 

obj = {foo: "bar"}

答案是引号是正确的JSON语法,而无引号是Javascript语法糖。我的问题是,如何获取任何未引用/半引用的javascript对象,即:

semi = { "foo" : "bar", hello: "world"}

并返回一个完全引用的对象,即:

fully = { "foo" : "bar", "hello": "world" }

在Javascript中。我不是指JSON.stringify(),因为它会返回一个字符串,我仍然想要一个普通的JS对象。谢谢!

2 个答案:

答案 0 :(得分:2)

Javascript解释器会在显示属性时引用属性,并且只有在包含短划线,空格或其他特殊字符时才会引用属性。

Javascript对象 NOT 与JSON相同。它们可能看起来非常相似,但JSON是javascript对象的字符串表示,而javascript对象具有属性名称的实际属性。这就是您可以使用点语法访问这些属性的原因。

console.log( semi.foo );

带引号的字符串表示只是为了您的视觉效益,而不是它们如何在内部表示。

答案 1 :(得分:0)

JavaScript对象键不是带引号的字符串:它们只是原始字符串

源代码中的键定义使用

{ unquotedKey:  "some value" }

作为对象初始值设定项创建并初始化具有键值对的对象。但是,语法确实需要unquotedKey符合JavaScript identifiers的规则。

源代码中的键定义使用

{ "quoted value!": "some value" }

以创建具有符合JavaScript标识符规则的键的对象的方式。

使用简写点表示法访问JavaScript属性名称时适用相同的限制:foo.bar有效,因为bar是标识符,但foo["was here"]需要数组查找表示法,因为was here是不是标识符。

现在输入JSON.stringify。默认情况下,stringify方法引用所有属性名称,以便在系统和编程语言之间交换对象的字符串表示形式。从JSON.stringiy的行为推断引用的标识符名称在某种程度上更好,或者在JavaScript中使用为编程访问设计的属性名称编写对象文字的正确方法是错误解释。