Object.assign()函數(shù)如何在ES6中使用?針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

1.Object.assign()基本用法:
Object.assign方法用來將源對(duì)象(source)的所有可枚舉屬性,復(fù)制到目標(biāo)對(duì)象(target)。它至少需要兩個(gè)對(duì)象作為參數(shù),第一個(gè)參數(shù)是目標(biāo)對(duì)象,后面的參數(shù)都是源對(duì)象。
let targetObj1 = { a: 1 };
let sourceObj1 = { b: 1 };
let sourceObj11 = { c: 3 };
Object.assign(targetObj1, sourceObj1, sourceObj11);
console.log(targetObj1);注:如果目標(biāo)對(duì)象與源對(duì)象有同名屬性,或多個(gè)源對(duì)象有同名屬性,則后面的屬性會(huì)覆蓋前面的屬性。
let targetObj1 = { a: 1, b: 2 };
let sourceObj1 = { b: 1 };
let sourceObj11 = { c: 3 };
Object.assign(targetObj1, sourceObj1, sourceObj11);
console.log(targetObj1);如果只有一個(gè)參數(shù),Object.assign會(huì)直接返回該參數(shù)。
let targetObj1 = { a: 4 }
Object.assign(targetObj1);
console.log(targetObj1)如果該參數(shù)不是對(duì)象,則會(huì)先轉(zhuǎn)成對(duì)象,然后返回。
console.log(typeof (Object.assign(2)));
由于undefined和null無法轉(zhuǎn)成對(duì)象,所以如果它們作為參數(shù),就會(huì)報(bào)錯(cuò)。
console.log(typeof(Object.assign(null))); console.log(typeof(Object.assign(underfind)));
注意:如果非對(duì)象參數(shù)出現(xiàn)在源對(duì)象的位置(即非首參數(shù)),那么處理規(guī)則有所不同。首先,這些參數(shù)都會(huì)轉(zhuǎn)成對(duì)象,如果無法轉(zhuǎn)成對(duì)象,就會(huì)跳過。這意味著, 如果undefined和null不在首參數(shù),就不會(huì)報(bào)錯(cuò)。其他類型的值(即數(shù)值、字符串和布爾值)不在首參數(shù),也不會(huì)報(bào)錯(cuò)。但是,除了字符串會(huì)以數(shù)組形式,拷貝入目標(biāo)對(duì)象,其他值都不會(huì)產(chǎn)生效果。
Object.assign只拷貝自身屬性,不可枚舉的屬性(enumerable為false)和繼承的屬性不會(huì)被拷貝。
let obj1 = Object.assign({ dwb: 'zjl' },
Object.defineProperty({}, 'zmf', {
enumerable: false,
value: 'zmf'
})
)
console.log(obj1);
let obj2 = Object.assign({ dwb: 'zjl' },
Object.defineProperty({}, 'zmf', {
enumerable: true,
value: 'zmf'
})
)
console.log(obj2);對(duì)于嵌套的對(duì)象,Object.assign的處理方法是替換,而不是添加。
var target = { a: { b: 'c', d: 'e' } }
var source = { a: { b: 'hello' } }
Object.assign(target, source);上面代碼中,target對(duì)象的a屬性被source對(duì)象的a屬性整個(gè)替換掉了,而不會(huì)得到{ a: { b: 'hello', d: 'e' } }的結(jié)果。這通常不是開發(fā)者想要的,需要特別小心。有一些函數(shù)庫提供Object.assign的定制版本(比如Lodash的_.defaultsDeep方法),可以解決深拷貝的問題。
注意,Object.assign可以用來處理數(shù)組,但是會(huì)把數(shù)組視為對(duì)象。
console.log(Object.assign([1, 2, 3], [4, 5]));
其中,4覆蓋1,5覆蓋2,因?yàn)樗鼈冊(cè)跀?shù)組的同一位置,所以就對(duì)應(yīng)位置覆蓋了。
Object.assign方法實(shí)行的是淺拷貝,而不是深拷貝。也就是說,如果源對(duì)象某個(gè)屬性的值是對(duì)象,那么目標(biāo)對(duì)象拷貝得到的是這個(gè)對(duì)象的引用。
var object1 = { a: { b: 1 } };
var object2 = Object.assign({}, object1);
object1.a.b = 2;
console.log(object2.a.b);2.用途
2.1為對(duì)象添加屬性
2.2為對(duì)象添加方法
2.3克隆對(duì)象
function copyFnc(origin) {
return Object.assign({}, origin)
}
var sur = { a: 1, b: 2 };
console.log(copyFnc(sur));上面代碼將原始對(duì)象拷貝到一個(gè)空對(duì)象,就得到了原始對(duì)象的克隆。
不過,采用這種方法克隆,只能克隆原始對(duì)象自身的值,不能克隆它繼承的值。如果想要保持繼承鏈,可以采用下面的代碼。
function clone(origin) {
let originProto = Object.getPrototypeOf(origin);
return Object.assign(Object.create(originProto), origin);
}在JS里子類利用Object.getPrototypeOf去調(diào)用父類方法,用來獲取對(duì)象的原型。
2.4 合并多個(gè)對(duì)象
//多個(gè)對(duì)象合并到某個(gè)對(duì)象
const merge = (target, ...sources) => Object.assign(target, ...sources);
//多個(gè)對(duì)象合并到新對(duì)象
const merge = (...sources) => Object.assign({}, ...sources);2.5為屬性指定默認(rèn)值
const DEFAULTS = {
logLevel: 0,
outputFormat: 'html'
};
function processContent(options) {
let options = Object.assign({}, DEFAULTS, options);
}關(guān)于Object.assign()函數(shù)如何在ES6中使用問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
分享名稱:Object.assign()函數(shù)如何在ES6中使用-創(chuàng)新互聯(lián)
本文來源:http://www.chinadenli.net/article38/pdcpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、用戶體驗(yàn)、建站公司、Google、品牌網(wǎng)站制作、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容