JS Object.assign詳解

一、基本介紹

Object.assign()方法用於將所有可枚舉屬性的值從一個或多個源對象複製到目標對象,並且返回目標對象。

Object.assign()方法接受任意數量的參數,第一個參數是目標對象,後面的參數是源對象。如果有多個源對象,後面的對象屬性將覆蓋前面的對象屬性。

語法:

Object.assign(target, ...sources)

返回值:目標對象

二、使用場景

Object.assign()方法常用於對象的複製、對象屬性的合併、對象屬性的默認值設置等場景。

三、對象的複製

下面代碼演示了如何使用Object.assign()方法進行淺複製對象。

const source = { a: 1, b: 2 };
const target = Object.assign({}, source);
console.log(target); // { a: 1, b: 2 }

在上面的代碼中,我們將source對象的所有屬性複製到了一個新的空對象中,並將其賦值給了target。這樣就完成了淺複製對象的操作。

四、對象屬性的合併

Object.assign()方法還可以用來合併多個對象,將多個對象的屬性合併到一個新對象中。

const source1 = { a: 1 };
const source2 = { b: 2 };
const source3 = { c: 3 };
const target = Object.assign({}, source1, source2, source3);
console.log(target); // { a: 1, b: 2, c: 3 }

在上面的代碼中,我們將3個源對象的屬性合併到了一個新對象中,並將其賦值給了target。

五、對象屬性的默認值設置

Object.assign()方法常用於為對象設置默認值,如果某個屬性已經存在,則使用已有的屬性值,如果不存在則使用默認值。

const source = { a: 1, b: 2 };
const defaults = { b: 0, c: 3 };
const target = Object.assign({}, source, defaults);
console.log(target); // { a: 1, b: 2, c: 3 }

在上面的代碼中,我們將source和defaults對象的屬性合併到了一個新對象中,並將其賦值給了target。如果defaults對象中的屬性已經存在於source對象中,則使用source中的屬性值;如果不存在,則使用defaults中的默認值。

六、其他使用方式

Object.assign()方法還可以用於數組的合併、字元串的複製、函數參數的默認值設置等場景。

// 對數組進行合併
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const arr3 = Object.assign([], arr1, arr2);
console.log(arr3); // [1, 2, 3, 4, 5, 6]

// 複製字元串
const str = 'hello';
const copyStr = Object.assign('', str);
console.log(copyStr); // 'hello'

// 函數參數默認值
function func(options) {
  const settings = Object.assign({}, {
    name: 'Default',
    age: 18
  }, options);
  console.log(settings);
}
func({ name: 'Tom' }); // { name: 'Tom', age: 18 }

七、注意事項

Object.assign()方法進行複製和合併時,涉及到的屬性值都是淺複製的。也就是說,如果源對象的屬性值是一個引用類型的值(如數組、對象等),則目標對象中的屬性值僅僅是該引用類型值的引用,並不是該引用類型的深拷貝。

const source = { a: [1, 2, 3] };
const target = Object.assign({}, source);
console.log(target); // { a: [1, 2, 3] }
source.a.push(4);
console.log(target); // { a: [1, 2, 3, 4] }

在上面的代碼中,我們將source對象的屬性複製到了target對象中。然後改變了source.a屬性值的內容,發現target對象中的a屬性值也發生了改變,因為source和target對象中的a屬性值其實是同一個數組的引用。

八、總結

Object.assign()方法是一個十分常用的JavaScript方法,可以實現對象的複製、屬性的合併和默認值的設置等場景。使用Object.assign()方法需要注意屬性值的淺複製問題。

原創文章,作者:ZITG,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/138769.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ZITG的頭像ZITG
上一篇 2024-10-04 00:21
下一篇 2024-10-04 00:21

相關推薦

  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • 解析js base64並轉成unit

    本文將從多個方面詳細介紹js中如何解析base64編碼並轉成unit格式。 一、base64編碼解析 在JavaScript中解析base64編碼可以使用atob()函數,它會將b…

    編程 2025-04-29
  • Node.js使用Body-Parser處理HTTP POST請求時,特殊字元無法返回的解決方法

    本文將解決Node.js使用Body-Parser處理HTTP POST請求時,特殊字元無法返回的問題。同時,給出一些相關示例代碼,以幫助讀者更好的理解並處理這個問題。 一、問題解…

    編程 2025-04-29
  • t3.js:一個全能的JavaScript動態文本替換工具

    t3.js是一個非常流行的JavaScript動態文本替換工具,它是一個輕量級庫,能夠很容易地實現文本內容的遞增、遞減、替換、切換以及其他各種操作。在本文中,我們將從多個方面探討t…

    編程 2025-04-28
  • JS圖片沿著SVG路徑移動實現方法

    本文將為大家詳細介紹如何使用JS實現圖片沿著SVG路徑移動的效果,包括路徑製作、路徑效果、以及實現代碼等內容。 一、路徑製作 路徑的製作,我們需要使用到SVG,SVG是可縮放矢量圖…

    編程 2025-04-27
  • 如何使用JS調用Python腳本

    本文將詳細介紹通過JS調用Python腳本的方法,包括使用Node.js、Python shell、child_process等三種方法,以及在Web應用中的應用。 一、使用Nod…

    編程 2025-04-27
  • 如何反混淆美團slider.js

    本文將從多個方面詳細闡述如何反混淆美團slider.js。在開始之前,需要明確的是,混淆是一種保護JavaScript代碼的方法,其目的是使代碼難以理解和修改。因此,在進行反混淆操…

    編程 2025-04-27
  • Python要學JS嗎?

    Python和JavaScript都是非常受歡迎的編程語言。然而,你可能會問,既然我已經學了Python,是不是也需要學一下JS呢?在本文中,我們將圍繞這個問題進行討論,並從多個角…

    編程 2025-04-27
  • 解決js ajax post 419問題

    對於使用ajax post請求時出現的419問題,我們需要進行以下幾個方面的闡述,包括返回碼的含義、可能出現的情況、解決方案等內容。 一、解析419返回碼 419返回碼錶示用戶超時…

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25

發表回復

登錄後才能評論