Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

JavaScriptのdeepCopyとshallowCopyの違い


浅いコピーと深いコピーは言語に依存しません。浅いコピーは可能な限り複製しません。コレクションの浅いコピーは、要素ではなく、コレクション構造のコピーです。浅いコピーで、2つのコレクションが個々の要素を共有するようになりました。

let innerObj = {
   a: 'b',
   c: 'd'
}
let obj = {
   x: "test",
   y: innerObj
}
// Create a shallow copy.
let copyObj = Object.assign({}, obj);
// Both copyObj and obj's prop y now refers to the same innerObj. Any changes to this will be reflected.
innerObj.a = "test"
console.log(obj)
console.log(copyObj)

出力

{ x: 'test', y: { a: 'test', c: 'd' } } 
{ x: 'test', y: { a: 'test', c: 'd' } } 

浅いコピーは再帰的にクローンを作成しないことに注意してください。トップレベルでそれを行うだけです。

ディープコピーはすべてを複製します。コレクションのディープコピーは、元のコレクションのすべての要素が複製された2つのコレクションです。

let innerObj = {
   a: 'b',
   c: 'd'
}
let obj = {
   x: "test",
   y: innerObj
}
// Create a deep copy.
let copyObj = JSON.parse(JSON.stringify(obj))
// Both copyObj and obj's prop y now refers to the same innerObj. Any changes to this will be reflected.
innerObj.a = "test"
console.log(obj)
console.log(copyObj)

出力

{ x: 'test', y: { a: 'test', c: 'd' } } 
{ x: 'test', y: { a: 'b', c: 'd' } } 

  1. JavaScriptの配列の合計と積の違い

    唯一の引数として数値の配列を受け取るJavaScript関数を作成する必要があります。関数は、配列内のすべての数値の合計とすべての数値の積を計算する必要があります。次に、関数は合計と積の絶対差を返す必要があります。 例 以下はコードです- const arr = [1, 4, 1, 2, 1, 6, 3]; const sumProductDifference = (arr = []) => {    const creds = arr.reduce((acc, val) => {       let { sum, product

  2. PHPとJavaScriptの違い

    この投稿では、PHPとJavaScriptの違いを理解します- JavaScript バックエンドだけでなく、フロントエンドでも機能します 非同期です。つまり、入出力操作を待機しません。 ブラウザで実行できます。「ノード」がリリースされているため、JavaScriptもコマンドラインで実行できます。 HTML、AJAX、XMLと組み合わせることができます。 これは、イベント駆動型のシングルスレッド言語です。これは、すべてをブロックするのではなく、同時に実行されることを意味します。 ステートメントはタグとタグ内に配置されます。 これらのタグはWebページ内のどこにでも存在できますが、