摘要:方法的第一個(gè)參數(shù)是目標(biāo)對(duì)象,后面的參數(shù)都是源對(duì)象。這個(gè)對(duì)象的任何變化,都會(huì)反映到目標(biāo)對(duì)象上面。方法將和合并成一個(gè)新對(duì)象,如果兩者有同名屬性,則的屬性值會(huì)覆蓋的屬性值。否則,對(duì)象的該屬性很可能不起作用。
對(duì)象字面量簡寫法
你可能寫過這樣的代碼:使用和所分配的變量名稱相同的名稱初始化對(duì)象。
let type = "quartz"; let color = "rose"; let carat = 21.29; const gemstone = { type: type, color: color, carat: carat }; console.log(gemstone);
看到重復(fù)的地方了嗎?type: type、color: color 和 carat:carat 不顯得很冗長嗎?
好消息是,如果屬性名稱和所分配的變量名稱一樣,那么就可以從對(duì)象屬性中刪掉這些重復(fù)的變量名稱。
我們來看看!
let type = "quartz"; let color = "rose"; let carat = 21.29; const gemstone = { type, color, carat };
還有一種向?qū)ο笾刑砑臃椒ǖ暮唽懛绞健?/p>
let type = "quartz"; let color = "rose"; let carat = 21.29; let gemstone = { type, color, carat, calculateWorth() { ... } };
在 ES6 中甚至連function 關(guān)鍵字也不需要.
對(duì)象Key值構(gòu)建有時(shí)候我們會(huì)在后臺(tái)取出key值,而不是我們前臺(tái)定義好的,這時(shí)候我們?nèi)绾螛?gòu)建我們的key值呢。比如我們在后臺(tái)取了一個(gè)key值,然后可以用[ ] 的形式,進(jìn)行對(duì)象的構(gòu)建。
let key="skill"; let obj={ [key]:"web" } console.log(obj.skill);Object.is( ) 對(duì)象比較
ES5 比較兩個(gè)值是否相等,只有兩個(gè)運(yùn)算符:相等運(yùn)算符==和嚴(yán)格相等運(yùn)算符===。它們都有缺點(diǎn),前者會(huì)自動(dòng)轉(zhuǎn)換數(shù)據(jù)類型,后者的NaN不等于自身,以及+0等于-0;
ES6 提出“Same-value equality”(同值相等)算法,用來解決這個(gè)問題。Object.is就是部署這個(gè)算法的新方法。它用來比較兩個(gè)值是否嚴(yán)格相等,與嚴(yán)格比較運(yùn)算符===的行為基本一致。
Object.is("foo", "foo") // true Object.is({}, {}) // false +0 === -0 //true NaN === NaN // false Object.is(+0, -0) // false Object.is(NaN, NaN) // trueObject.assign() 基本使用
Object.assign方法用于對(duì)象的合并,將源對(duì)象(source)的所有可枚舉屬性,復(fù)制到目標(biāo)對(duì)象(target)。
Object.assign方法的第一個(gè)參數(shù)是目標(biāo)對(duì)象,后面的參數(shù)都是源對(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}注意事項(xiàng) 同名屬性
如果目標(biāo)對(duì)象與源對(duì)象有同名屬性,或多個(gè)源對(duì)象有同名屬性,則后面的屬性會(huì)覆蓋前面的屬性。
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}淺拷貝
Object.assign方法實(shí)行的是淺拷貝,而不是深拷貝。也就是說,如果源對(duì)象某個(gè)屬性的值是對(duì)象,那么目標(biāo)對(duì)象拷貝得到的是這個(gè)對(duì)象的引用。
const obj1 = {a: {b: 1}}; const obj2 = Object.assign({}, obj1); obj1.a.b = 2; obj2.a.b // 2
上面代碼中,源對(duì)象obj1的a屬性的值是一個(gè)對(duì)象,Object.assign拷貝得到的是這個(gè)對(duì)象的引用。這個(gè)對(duì)象的任何變化,都會(huì)反映到目標(biāo)對(duì)象上面。
為屬性指定默認(rèn)值
const DEFAULTS = { logLevel: 0, outputFormat: "html" }; function processContent(options) { options = Object.assign({}, DEFAULTS, options); console.log(options); // ... }
面代碼中,DEFAULTS對(duì)象是默認(rèn)值,options對(duì)象是用戶提供的參數(shù)。Object.assign方法將DEFAULTS和options合并成一個(gè)新對(duì)象,如果兩者有同名屬性,則option的屬性值會(huì)覆蓋DEFAULTS的屬性值。
注意,由于存在淺拷貝的問題,DEFAULTS對(duì)象和options對(duì)象的所有屬性的值,最好都是簡單類型,不要指向另一個(gè)對(duì)象。否則,DEFAULTS對(duì)象的該屬性很可能不起作用。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/90568.html
摘要:它是一個(gè)通用標(biāo)準(zhǔn),奠定了的基本語法。年月發(fā)布了的第一個(gè)版本,正式名稱就是標(biāo)準(zhǔn)簡稱。結(jié)語的基本擴(kuò)展還有一些沒有在這里詳細(xì)介紹。 前言 ES6標(biāo)準(zhǔn)以及頒布兩年了,但是,好像還沒有完全走進(jìn)我們的日常開發(fā)。這篇文章從ES6的基本類型擴(kuò)展入手,逐步展開對(duì)ES6的介紹。 ECMAScript和JavaScript JavaScript是由Netscape創(chuàng)造的,該公司1996年11月將JavaSc...
摘要:函數(shù)的擴(kuò)展函數(shù)參數(shù)的默認(rèn)值之前,不能直接為函數(shù)的參數(shù)指定默認(rèn)值,只能采用變通的方法。箭頭函數(shù)引入了一種新的函數(shù),叫做箭頭函數(shù)。箭頭函數(shù)和普通函數(shù)的行為非常相似,但是在語法構(gòu)成上非常不同。意味著函數(shù)內(nèi)的的值是全局對(duì)象,不是對(duì)象。 函數(shù)的擴(kuò)展 函數(shù)參數(shù)的默認(rèn)值 ES6 之前,不能直接為函數(shù)的參數(shù)指定默認(rèn)值,只能采用變通的方法。 function log(x, y) { y = y ||...
摘要:模板字符串連接符在之前,將字符串連接到一起的舊方法是使用字符串連接運(yùn)算符。這樣更容易構(gòu)建字符串。返回布爾值,表示參數(shù)字符串是否在原字符串的頭部。它針對(duì)前個(gè)字符,而其他兩個(gè)方法針對(duì)從第個(gè)位置直到字符串結(jié)束。 模板字符串 + 連接符 在 ES6 之前,將字符串連接到一起的舊方法是使用字符串連接運(yùn)算符 (+)。 const student = { name: Richard Kaleho...
摘要:有兩個(gè)協(xié)議可迭代協(xié)議和迭代器協(xié)議。為了變成可迭代對(duì)象,一個(gè)對(duì)象必須實(shí)現(xiàn)或者它原型鏈的某個(gè)對(duì)象必須有一個(gè)名字是的屬性迭代器協(xié)議該迭代器協(xié)議定義了一種標(biāo)準(zhǔn)的方式來產(chǎn)生一個(gè)有限或無限序列的值。 ECMAScript 2015的幾個(gè)補(bǔ)充,并不是新的內(nèi)置或語法,而是協(xié)議。這些協(xié)議可以被任何遵循某些約定的對(duì)象來實(shí)現(xiàn)。有兩個(gè)協(xié)議:可迭代協(xié)議和迭代器協(xié)議。 可迭代協(xié)議 可迭代協(xié)議允許 JavaScri...
摘要:在語法中,操作符有兩種意義剩余語法,參數(shù)和展開語法,展開數(shù)組對(duì)象,作為函數(shù)數(shù)組對(duì)象的擴(kuò)展運(yùn)算符。使用和參數(shù)進(jìn)行操作其余參數(shù)傳給原始函數(shù)展開語法運(yùn)算則可以看作是參數(shù)的逆運(yùn)算。 在ES6語法中,...操作符有兩種意義:rest(剩余語法,rest參數(shù)) 和 spread(展開語法,展開數(shù)組/對(duì)象),作為函數(shù)、數(shù)組、對(duì)象的擴(kuò)展運(yùn)算符。 從某種意義上說,剩余語法與展開語法是相反的:剩余語法將多...
閱讀 1877·2019-08-29 16:44
閱讀 2179·2019-08-29 16:30
閱讀 789·2019-08-29 15:12
閱讀 3534·2019-08-26 10:48
閱讀 2665·2019-08-23 18:33
閱讀 3785·2019-08-23 17:01
閱讀 1947·2019-08-23 15:54
閱讀 1310·2019-08-23 15:05