在凯尔辛普森的书You Don't Know JS: this & Object Prototypes中,他写了关于如何复制对象的主题:
一个子集解决方案是JSON安全的对象(即,可以序列化为JSON字符串然后重新解析为具有相同结构和值的对象)可以轻松地重复用:
var newObj = JSON.parse( JSON.stringify( someObj ) );
当然,这需要您确保您的对象是JSON安全的。在某些情况下,这是微不足道的。对于其他人来说,这还不够。
什么是“JSON安全”对象?我使用JavaScript运行了一些测试,到目前为止大多数事情(数组,数字,字符串,对象)可以使用上面的行复制,但方法(foo.bar
)除外,当尝试复制方法时,{{1 }}被插入到重复对象中的方法位置。
答案 0 :(得分:2)
获取foo
< => JSON.parse(JSON.stringify(foo))
同样如此,我们必须能够在JSON format中代表foo
。
JSON仅支持:
数字:带符号的十进制数,可能包含小数部分,可能使用指数E表示法,但不能包含像NaN这样的非数字。格式不区分整数和浮点。 JavaScript对其所有数值使用双精度浮点格式,但实现JSON的其他语言可能会对数字进行不同的编码。
String:零个或多个Unicode字符的序列。字符串用双引号分隔,并支持反斜杠转义语法。
布尔值:值为true或false
数组:零个或多个值的有序列表,每个值可以是任何类型。数组使用方括号表示法,元素以逗号分隔。
对象:名称/值对的无序集合,其中名称(也称为键)是字符串。由于对象旨在表示关联数组,[12]建议(尽管不是必需的)[13]每个键在对象中是唯一的。对象用大括号分隔,并使用逗号分隔每对,而在每对内,冒号':'字符将键或名称与其值分开。
null:空值,使用单词null
在javascript中,JSON safe object
的概念基本上是指一个javascript对象,它可以用JSON格式表示而不会有任何损失。