国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

瞎說系列之Object.assign入門

jk_v1 / 3503人閱讀

摘要:如果只傳入了一個(gè)參數(shù),則該方法會(huì)直接返回該參數(shù)。如果傳入的參數(shù)不是對(duì)象,原始類型會(huì)被包裝為對(duì)象。和無法被轉(zhuǎn)為對(duì)象,所以如果把它們兩個(gè)作為目標(biāo)對(duì)象則會(huì)報(bào)錯(cuò)。注意首先基本數(shù)據(jù)類型會(huì)被包裝成對(duì)象,和會(huì)被忽略。后續(xù)的內(nèi)容,敬請(qǐng)期待。

前言

過去的一個(gè)多月新接手了一個(gè)公司的老項(xiàng)目,在實(shí)現(xiàn)新需求的同時(shí)還需要對(duì)有些地方進(jìn)行重構(gòu),故而導(dǎo)致了沒時(shí)間更新文章。最近趁著周末更新一篇關(guān)于Object.assign使用的文章。

簡(jiǎn)介

Object.assign()方法用于將所有可枚舉的屬性的值從一個(gè)或多個(gè)源對(duì)象復(fù)制到目標(biāo)對(duì)象,它將返回目標(biāo)對(duì)象。這里有兩點(diǎn)需要注意:1、該方法復(fù)制的是可枚舉的屬性的值,不可枚舉的屬性不會(huì)處理。2、它返回的是一個(gè)對(duì)象。

語法
Object.assign(target,...sources)
基本用法 合并對(duì)象
const target = { a: 1 }
const source1 = { b: 2 }
const source2 = { c: 3 }
Object.assign(target, source1, source2)
console.log(target)
// {a: 1, b: 2, c: 3}

注意:如果目標(biāo)對(duì)象與源對(duì)象的屬性具有相同的鍵,或者多個(gè)源對(duì)象的屬性具有相同的鍵,則后面對(duì)象的屬性會(huì)覆蓋前面對(duì)象的屬性。

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

如果只傳入了一個(gè)參數(shù),則該方法會(huì)直接返回該參數(shù)。

const target = { a: 1 }
Object.assign(target)
console.log(target)
// {a: 1}
console.log(Object.assign(target) === target)
// true

如果傳入的參數(shù)不是對(duì)象,原始類型會(huì)被包裝為對(duì)象。

const target = Object.assign(1)
console.log(target)
// Number?{1}
typeof target
// "object"

null和undefined無法被轉(zhuǎn)為對(duì)象,所以如果把它們兩個(gè)作為目標(biāo)對(duì)象則會(huì)報(bào)錯(cuò)。

const target = Object.assign(null)
const tar = Object.assign(undefined)
// Cannot convert undefined or null to object

如果null和undefined作為源對(duì)象,則不會(huì)報(bào)錯(cuò),因?yàn)榛緮?shù)據(jù)類型被包裝,null和undefined會(huì)被忽略。

const target = Object.assign({a:1}, null)
const tar = Object.assign({a:1}, undefined)
// {a:1}
const target1 = Object.assign(1, null)
// Number?{1}

如果null和undefined作為源對(duì)象中的屬性值,則它們不會(huì)被忽略

const target = Object.assign({ a: 1 }, { b: null }, { c: undefined })
console.log(target)
// {a: 1, b: null, c: undefined}
拷貝

復(fù)制一個(gè)對(duì)象

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

拷貝symbol類型的屬性

const target = Object.assign({}, { a: 1 }, { [Symbol("foo")]: 2 })
console.log(target)
// {a: 1, Symbol(foo): 2}

拷貝的屬性是有限制的,繼承屬性和不可枚舉屬性無法被拷貝。

const obj = Object.defineProperty({}, "a", {
  enumerable: false,
  value: 1
})
console.log(obj)
// {a: 1}
const target = Object.assign({b: 2}, obj)
console.log(target)
// {b: 2}

現(xiàn)在把a(bǔ)屬性變成可枚舉的屬性。

const obj = Object.defineProperty({}, "a", {
  enumerable: true,
  value: 1
})
console.log(obj)
// {a: 1}
const target = Object.assign({b: 2}, obj)
console.log(target)
// {b: 2, a: 1}

接下來再看看基本數(shù)據(jù)類型的可枚舉性。

注意:首先基本數(shù)據(jù)類型會(huì)被包裝成對(duì)象,null和undefined會(huì)被忽略。其次只有字符串的包裝對(duì)象才可能有自身可枚舉屬性。

const v1 = "abc"
const v2 = true
const v3 = 10
const v4 = Symbol("foo")
const target = Object.assign({}, v1, null, v2, undefined, v3, v4)
console.log(target)
// {0: "a", 1: "b", 2: "c"}

拷貝一個(gè)數(shù)組。該方法會(huì)把數(shù)組視為對(duì)象,同時(shí)在拷貝的時(shí)候通過位置來進(jìn)行覆蓋。

const target = Object.assign([1,2,3],[4,5])
console.log(target)
// [4, 5, 3]
深淺拷貝

Object.assgin()實(shí)現(xiàn)的是淺拷貝。如果源對(duì)象中的某個(gè)屬性的值也是對(duì)象,那么目標(biāo)對(duì)象拷貝得到的是這個(gè)對(duì)象的引用,一旦這個(gè)對(duì)象發(fā)生改變,那么拷貝后的目標(biāo)對(duì)象也做相應(yīng)的改變。

let obj1 = { a: 0 , b: { c: 0}}
let obj2 = Object.assign({}, obj1)
console.log(JSON.stringify(obj2))
// {"a":0,"b":{"c":0}}
obj1.a = 1
console.log(JSON.stringify(obj1))
// {"a":1,"b":{"c":0}}
console.log(JSON.stringify(obj2))
// {"a":0,"b":{"c":0}}
obj2.a = 2
console.log(JSON.stringify(obj1))
// {"a":1,"b":{"c":0}}
console.log(JSON.stringify(obj2))
// {"a":2,"b":{"c":0}}
obj1.b.c = 3
console.log(JSON.stringify(obj1))
// {"a":1,"b":{"c":3}}
console.log(JSON.stringify(obj2))
// {"a":0,"b":{"c":3}}

至于深淺拷貝的區(qū)別以及如何實(shí)現(xiàn)的問題,會(huì)在之后的文章中詳細(xì)說明。

常見用途 為對(duì)象添加屬性
class Person {
  constructor(x, y) {
    Object.assign(this, {x, y})
  }
}
為對(duì)象添加方法
Object.assign(someClass.prototype, {
  foo(x, y){
    ....
  }
})
合并多個(gè)對(duì)象
Object.assign(target, ...sources)
復(fù)制一個(gè)對(duì)象
const target = Object.assign({}, { a: 1 })
console.log(target)
// {a: 1}
為屬性指定默認(rèn)值
const DEFAULT_VALUE = {
  name: "Joe",
  age: "27"
}
function foo(options) {
  return Object.assign({}, DEFAULT_VALUE, options)
}
瀏覽器兼容性

最后

感謝各位能夠耐心的讀完,如有錯(cuò)誤歡迎指正,讓我們一起進(jìn)步。后續(xù)的內(nèi)容,敬請(qǐng)期待。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/102912.html

相關(guān)文章

  • ES6入門對(duì)象的新增方法

    showImg(https://user-gold-cdn.xitu.io/2019/5/22/16adcec448a45d82); 1. Object.is() 用來解決在ES5中 兩種相等運(yùn)算符的缺點(diǎn)。用來比較兩個(gè)值是否嚴(yán)格相等,行為和(===)基本一致。 在ES5中判斷兩個(gè)值是否相等,只能用(==)相等運(yùn)算符和(===)嚴(yán)格相等運(yùn)算符,但是這兩貨都有缺點(diǎn),前者 兩邊的值都會(huì)轉(zhuǎn)換數(shù)據(jù)類型,...

    zhou_you 評(píng)論0 收藏0
  • ES6入門對(duì)象的新增方法

    showImg(https://segmentfault.com/img/remote/1460000019258913?w=2933&h=1955); 1. Object.is() 用來解決在ES5中 兩種相等運(yùn)算符的缺點(diǎn)。用來比較兩個(gè)值是否嚴(yán)格相等,行為和(===)基本一致。 在ES5中判斷兩個(gè)值是否相等,只能用(==)相等運(yùn)算符和(===)嚴(yán)格相等運(yùn)算符,但是這兩貨都有缺點(diǎn),前者 兩邊的值都...

    Keven 評(píng)論0 收藏0
  • ES6入門對(duì)象的擴(kuò)展

    摘要:循環(huán)遍歷對(duì)象自身的和繼承的可枚舉屬性不含屬性。返回一個(gè)數(shù)組,包含對(duì)象自身的所有屬性的鍵名。目前,只有對(duì)象方法的簡(jiǎn)寫法可以讓引擎確認(rèn),定義的是對(duì)象的方法。showImg(https://user-gold-cdn.xitu.io/2019/5/21/16ada8456223b0e1); 1. 屬性的簡(jiǎn)潔表示法 在ES6中 允許直接寫入變量和函數(shù),作為對(duì)象的屬性和方法,使得代碼的書寫更為簡(jiǎn)潔。...

    RiverLi 評(píng)論0 收藏0
  • ES6入門對(duì)象的擴(kuò)展

    摘要:屬性的簡(jiǎn)潔表示法在中允許直接寫入變量和函數(shù),作為對(duì)象的屬性和方法,使得代碼的書寫更為簡(jiǎn)潔。循環(huán)遍歷對(duì)象自身的和繼承的可枚舉屬性不含屬性。返回一個(gè)數(shù)組,包含對(duì)象自身的所有屬性的鍵名。 showImg(https://segmentfault.com/img/remote/1460000019259004?w=1282&h=1920); 1. 屬性的簡(jiǎn)潔表示法 在ES6中 允許直接寫入變量...

    AWang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<