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

資訊專欄INFORMATION COLUMN

ES6語法之對(duì)象的擴(kuò)展

SillyMonkey / 2488人閱讀

摘要:方法的第一個(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: colorcarat: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) // true
Object.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ì)象obj1a屬性的值是一個(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方法將DEFAULTSoptions合并成一個(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

相關(guān)文章

  • ES6學(xué)習(xí)手稿基本類型擴(kuò)展

    摘要:它是一個(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...

    tommego 評(píng)論0 收藏0
  • ES6語法函數(shù)擴(kuò)展

    摘要:函數(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 ||...

    Clect 評(píng)論0 收藏0
  • ES6語法字符串擴(kuò)展

    摘要:模板字符串連接符在之前,將字符串連接到一起的舊方法是使用字符串連接運(yùn)算符。這樣更容易構(gòu)建字符串。返回布爾值,表示參數(shù)字符串是否在原字符串的頭部。它針對(duì)前個(gè)字符,而其他兩個(gè)方法針對(duì)從第個(gè)位置直到字符串結(jié)束。 模板字符串 + 連接符 在 ES6 之前,將字符串連接到一起的舊方法是使用字符串連接運(yùn)算符 (+)。 const student = { name: Richard Kaleho...

    孫淑建 評(píng)論0 收藏0
  • ES6語法可迭代協(xié)議和迭代器協(xié)議

    摘要:有兩個(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...

    sarva 評(píng)論0 收藏0
  • ES6 ...操作符

    摘要:在語法中,操作符有兩種意義剩余語法,參數(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)算符。 從某種意義上說,剩余語法與展開語法是相反的:剩余語法將多...

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

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

0條評(píng)論

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