许多问题都在询问
之间的区别obj = {"foo" : "bar"}
和
obj = {foo: "bar"}
答案是引号是正确的JSON语法,而无引号是Javascript语法糖。我的问题是,如何获取任何未引用/半引用的javascript对象,即:
semi = { "foo" : "bar", hello: "world"}
并返回一个完全引用的对象,即:
fully = { "foo" : "bar", "hello": "world" }
在Javascript中。我不是指JSON.stringify(),因为它会返回一个字符串,我仍然想要一个普通的JS对象。谢谢!
答案 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中使用为编程访问设计的属性名称编写对象文字的正确方法是错误解释。