古い質問ですが、今日これを探していました-答えは「いいえ」です。
https://api.jquery.com/jquery.extend/
深い拡張では、Object と Array は拡張されますが、String、Boolean、Number などのプリミティブ型のオブジェクト ラッパーは拡張されません。循環データ構造を深く拡張すると、エラーが発生します。
この動作に当てはまらない必要がある場合は、代わりにカスタムの extends メソッドを記述するか、lodash などのライブラリを使用してください。
lodash のドキュメントはあまり明確ではありませんが、_.cloneDeep は循環参照の複製をサポートしています。
https://lodash.com/docs/4.17.10#cloneDeep
複数回参照されているすべてのオブジェクトを正しく検出し、すべての循環参照をそのままにしてオブジェクトグラフ全体の真のクローンを作成すると思うので、lodash のような賢いものを使用することをお勧めします。
ただし、これは単純なオブジェクトのスタックを使用して循環参照を単純に無視する単純なディープ クローンです (これは TypeScript にあります)。
public static DeepClone(source: any, stack: any[] = null): any
{
if (!source)
{
return source;
}
var result;
result = Array.isArray(source) ? [] : {};
for (var k in source)
{
var v = source[k];
if (typeof v === "object")
{
stack = stack || [];
// Just ignore circular references? Or, to be clever, maintain a
// dictionary of object references from the original graph linked to
// the new objects in the cloned graph, to preserve the full graph.
if (stack.indexOf(source) >= 0)
{
return null;
}
stack.push(source);
result[k] = this.DeepClone(v, stack);
stack.pop();
}
else
{
result[k] = v;
}
}
return result;
}