JSON.parse(JSON.stringify(x))目的?

Min*_*uel 9 javascript json

当我正在开发一个项目时,我遇到了这段代码:

var params = JSON.parse(JSON.stringify(defaultParams));
Run Code Online (Sandbox Code Playgroud)

这段代码实际上做了什么吗?

MrC*_*ode 12

这是一种克隆对象的方法,因此您可以获得一个唯一但与克隆对象具有相同属性的完整副本.

var defaultParams = { a : 'b' };
var params = JSON.parse(JSON.stringify(defaultParams));

console.log( params.a ); // b
console.log( defaultParams.a ); // b
console.log( params === defaultParams ); // false
Run Code Online (Sandbox Code Playgroud)

上面的输出false是因为即使两个对象都具有a属性,但是有值b,有不同的对象彼此独立(它们不引用相同的引用).

JSON方法仅适用于基本属性 - 没有函数或方法.

  • 使用这个“技巧”多年后,我刚刚意识到 - 它搞乱了日期!我在 ISO 格式的输出对象中获得了日期属性,就好像我在其上调用 toISOString() 方法一样! (4认同)
  • 使用这种克隆方法的更多缺点如下:https://medium.com/@pmzubar/why-json-parse-json-stringify-is-a-bad-practice-to-clone-an-object-in- javascript-b28ac5e36521 它也会弄乱 NAN 和 Infinity。 (2认同)