黄舟2017-05-19 10:27:31
現在のobjがオブジェクトであるか配列であるかを判断します。配列の場合、結果も配列になります。それ以外の場合、結果は通常のオブジェクトになります
あなたの理解は間違っています、この文は如果 obj 存在,并且是对象
参照型(オブジェクト)でない場合は、現在のキーの値が基本型であることを意味し、新しい結果に対応するキーをこの値に直接設定します
ちなみに、オブジェクトをディープコピーするとメモリリークが発生する可能性があるためです。キーは型を参照する可能性があり、それによってそれ自体が内部的に参照され、メモリ リークが発生するため、ディープ コピーは参照型キーに遭遇した場合にのみヒープ メモリのアドレスをコピーします。
そして、質問の最初の行では、splice
を判断することによって、それが配列であるかオブジェクトであるかを判断するのは厳密ではありません。Array.isArray であるオブジェクトの下に splice と呼ばれるプロパティがある場合はどうなるでしょうか。このメソッドは適切にサポートされており、これに置き換えることができます。
ES6 の場合は、Object.assign()
だけ
漂亮男人2017-05-19 10:27:31
obj がオブジェクトであるか配列であるかを判断します。配列のみが splice メソッドを持っているためです。obj.splice
が obj が配列であることを示す戻り値を持つ場合、結果も配列になります。それ以外の場合、結果はオブジェクトになります。
if (obj が存在し、obj がオブジェクトである)、null typeof
もオブジェクトなので、もう 1 つの判断ステップで null を削除できます。
コピーされた値が private
值,那么就直接赋值就可以,如果是对象,那么就像上一步一样递归的复制对象,直到复制的值是private
値の場合。
浅いコピーと深いコピーについて言えば、恥ずかしながら私が書いた記事を読むことをお勧めします...
/a/11...