中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Object.assign()函數如何在ES6中使用

發布時間:2021-01-12 16:20:39 來源:億速云 閱讀:209 作者:Leah 欄目:web開發

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

1.Object.assign()基本用法:

Object.assign方法用來將源對象(source)的所有可枚舉屬性,復制到目標對象(target)。它至少需要兩個對象作為參數,第一個參數是目標對象,后面的參數都是源對象。

let targetObj1 = { a: 1 };
    let sourceObj1 = { b: 1 };
    let sourceObj11 = { c: 3 };
    Object.assign(targetObj1, sourceObj1, sourceObj11);
    console.log(targetObj1);

注:如果目標對象與源對象有同名屬性,或多個源對象有同名屬性,則后面的屬性會覆蓋前面的屬性。

let targetObj1 = { a: 1, b: 2 };
    let sourceObj1 = { b: 1 };
    let sourceObj11 = { c: 3 };
    Object.assign(targetObj1, sourceObj1, sourceObj11);
    console.log(targetObj1);

如果只有一個參數,Object.assign會直接返回該參數。

let targetObj1 = { a: 4 }
    Object.assign(targetObj1);
    console.log(targetObj1)

如果該參數不是對象,則會先轉成對象,然后返回。

console.log(typeof (Object.assign(2)));

由于undefined和null無法轉成對象,所以如果它們作為參數,就會報錯。

console.log(typeof(Object.assign(null)));
 
 console.log(typeof(Object.assign(underfind)));

注意:如果非對象參數出現在源對象的位置(即非首參數),那么處理規則有所不同。首先,這些參數都會轉成對象,如果無法轉成對象,就會跳過。這意味著, 如果undefined和null不在首參數,就不會報錯。其他類型的值(即數值、字符串和布爾值)不在首參數,也不會報錯。但是,除了字符串會以數組形式,拷貝入目標對象,其他值都不會產生效果。

Object.assign只拷貝自身屬性,不可枚舉的屬性(enumerable為false)和繼承的屬性不會被拷貝。

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);

對于嵌套的對象,Object.assign的處理方法是替換,而不是添加。

var target = { a: { b: 'c', d: 'e' } }
 
var source = { a: { b: 'hello' } }
 
Object.assign(target, source);

上面代碼中,target對象的a屬性被source對象的a屬性整個替換掉了,而不會得到{ a: { b: 'hello', d: 'e' } }的結果。這通常不是開發者想要的,需要特別小心。有一些函數庫提供Object.assign的定制版本(比如Lodash的_.defaultsDeep方法),可以解決深拷貝的問題。

注意,Object.assign可以用來處理數組,但是會把數組視為對象。

console.log(Object.assign([1, 2, 3], [4, 5]));

其中,4覆蓋1,5覆蓋2,因為它們在數組的同一位置,所以就對應位置覆蓋了。

Object.assign方法實行的是淺拷貝,而不是深拷貝。也就是說,如果源對象某個屬性的值是對象,那么目標對象拷貝得到的是這個對象的引用。

var object1 = { a: { b: 1 } };
 
var object2 = Object.assign({}, object1);
 
object1.a.b = 2;
 
console.log(object2.a.b);

2.用途

2.1為對象添加屬性

2.2為對象添加方法

2.3克隆對象

function copyFnc(origin) {
 
return Object.assign({}, origin)
 
}
 
var sur = { a: 1, b: 2 };
 
console.log(copyFnc(sur));

上面代碼將原始對象拷貝到一個空對象,就得到了原始對象的克隆。

不過,采用這種方法克隆,只能克隆原始對象自身的值,不能克隆它繼承的值。如果想要保持繼承鏈,可以采用下面的代碼。

function clone(origin) {
 
let originProto = Object.getPrototypeOf(origin);
 
return Object.assign(Object.create(originProto), origin);
 
}

 在JS里子類利用Object.getPrototypeOf去調用父類方法,用來獲取對象的原型。

2.4 合并多個對象

//多個對象合并到某個對象

const merge = (target, ...sources) => Object.assign(target, ...sources);
//多個對象合并到新對象

const merge = (...sources) => Object.assign({}, ...sources);

2.5為屬性指定默認值

const DEFAULTS = {
 
logLevel: 0,
 
outputFormat: 'html'
 
};
 
function processContent(options) {
 
let options = Object.assign({}, DEFAULTS, options);
 
}

關于Object.assign()函數如何在ES6中使用問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

磐石市| 墨竹工卡县| 昔阳县| 白河县| 隆林| 离岛区| 阿图什市| 丹凤县| 临清市| 集安市| 喀喇| 南澳县| 德兴市| 吉林市| 偏关县| 封开县| 吉隆县| 伊金霍洛旗| 华阴市| 奉化市| 门源| 名山县| 庆阳市| 房山区| 宁津县| 马山县| 嘉祥县| 乐山市| 威信县| 儋州市| 泾源县| 南陵县| 肥西县| 古交市| 凌云县| 永康市| 佛坪县| 玉环县| 防城港市| 西乌珠穆沁旗| 乐亭县|