一尘不染

使用JSON.stringify进行深度比较和克隆是否合适?

json

在尝试了几种实现方式以进行深度比较并复制可序列化的JSON对象之后,我注意到最快的往往是:

function deep_clone(a){
   return JSON.parse(JSON.stringify(a));
};
function is_equal(a,b){
    return JSON.stringify(a) === JSON.stringify(b);
};

不过,我觉得这很欺骗。就像我会发现一些困扰我未来的问题。使用这些可以吗?


阅读 329

收藏
2020-07-27

共1个答案

一尘不染

JavaScript不保证键的顺序。

如果以相同的顺序输入它们,则这种方法在大多数情况下会起作用,但并不可靠。

同样,对于深度相等但以不同顺序输入其键的对象,它将返回false:

JSON.stringify({ a: 1, b: 2}) === "{"a":1,"b":2}"

JSON.stringify({ b: 2, a: 1}) === "{"b":2,"a":1}"
2020-07-27