什么是JSON安全对象?

dou*_*Ort 8 javascript json

在Kyle Simpson的书" 你不了解JS:这个和对象原型"中,他写了关于如何复制对象的主题:

一个子集解决方案是,JSON安全的对象(即,可以序列化为JSON字符串,然后重新解析为具有相同结构和值的对象)可以轻松复制:

var newObj = JSON.parse( JSON.stringify( someObj ) );
Run Code Online (Sandbox Code Playgroud)

当然,这需要您确保您的对象是JSON安全的.在某些情况下,这是微不足道的.对于其他人来说,这还不够.

什么是"JSON安全"对象?我用JavaScript运行了一些测试,到目前为止大多数事情(数组,数字,字符串,对象)都可以使用上面的行复制,但方法(foo.bar),当试图复制方法时,undefined插入方法的位置,重复的对象.

Viv*_*ick 3

要使foo<=>JSON.parse(JSON.stringify(foo))为 true,我们必须能够fooJSON 格式表示表示。

\n\n

JSON 仅支持:

\n\n
\n

数字:带符号的十进制数,可以包含小数部分,并且可以使用指数\xc2\xa0E 表示法,但不能包含像\xc2\xa0NaN 这样的非数字。该格式不区分整数和浮点数。JavaScript 对所有数值使用\xc2\xa0 双精度浮点格式\xc2\xa0,但实现 JSON 的其他语言可能会以不同方式对数字进行编码。

\n
\n\n


\n\n
\n

字符串:零个或多个\xc2\xa0Unicode字符的序列。字符串用双引号分隔,并支持反斜杠\xc2\xa0escaping\xc2\xa0语法。

\n
\n\n


\n\n
\n

布尔值:值\xc2\xa0true\xc2\xa0或\xc2\xa0false之一

\n
\n\n


\n\n
\n

数组:包含零个或多个值的\xc2\xa0有序列表\xc2\xa0,每个值可以是任何类型。数组使用\xc2\xa0方括号\xc2\xa0表示法,元素之间以逗号分隔。

\n
\n\n


\n\n
\n

对象:名称/值对的无序集合,其中名称(也称为键)是字符串。由于对象旨在表示\xc2\xa0关联数组,[12]\xc2\xa0建议(尽管不是必需的),[13]\xc2\xa0每个键在对象中是唯一的。对象用\xc2\xa0大括号\xc2\xa0分隔,并使用逗号分隔每一对,而在每对中,冒号\':\'字符将键或名称与其值分开。

\n
\n\n


\n\n
\n

null:空值,使用单词\xc2\xa0null

\n
\n\n


\n\n

在 javascript 中, 的概念JSON safe object基本上是指可以无任何损失地以 JSON 格式表示的 javascript 对象。

\n

  • @RoyiNamir OP 在编辑之前有这一行(他们说在复制过程中不得丢失任何内容,以便计算结果为 true):`foo === JSON.parse(JSON.stringify(foo))`,我只是想说无论如何,“foo”对于“JSON.parse(JSON.stringify(foo))”的结果永远不会是“===”。 (2认同)