ES6实用方法Object.assign、defineProperty、Symbol
文章目錄
- 1.合并對(duì)象 - Object.assign()
- 介紹
- 進(jìn)階
- 注意
- 用途
- 2.定義對(duì)象 - Object.defineProperty(obj, prop, descriptor)
- 3.新數(shù)據(jù)類型- Symbol
- 定義
- 應(yīng)用
1.合并對(duì)象 - Object.assign()
介紹
- assign方法可以將多個(gè)對(duì)象(字典),語(yǔ)法:Object.assign(srcObj,obj1,obj2…)
- 對(duì)于重復(fù)的鍵將會(huì)被覆蓋(尤其注意對(duì)象被覆蓋),對(duì)于可枚舉(迭代)參數(shù)(被合并對(duì)象)若不是對(duì)象則自動(dòng)轉(zhuǎn)換成對(duì)象合并(如string,[]),對(duì)于不可枚舉參數(shù)(undefined,null)會(huì)自動(dòng)跳過(guò)。
- 若源對(duì)象(第一個(gè)參數(shù))不可枚舉則會(huì)報(bào)錯(cuò)
進(jìn)階
- 當(dāng)聲明一個(gè)對(duì)象時(shí),它的enumerable屬性默認(rèn)是true,我們也可以顯示的將它設(shè)為false,所以說(shuō)對(duì)象不一定都是可迭代的(眼見不一定為實(shí)),但可以通過(guò)’.'取到。
- 若拷貝類型是Symbol 類型也會(huì)被拷貝。Symbol :和int、float等一樣是數(shù)據(jù)類型,只不過(guò)他是隱藏類型,直接訪問(wèn)是取不到的
注意
- 拷貝后的數(shù)據(jù)間的影響關(guān)系
- 拷貝對(duì)象是數(shù)組則按照字典處理,數(shù)組很好理解成字典,如[‘a(chǎn)’,‘b’,‘c’],實(shí)際上會(huì)自動(dòng)分配鍵,等價(jià)于{0:‘a(chǎn)’,1:‘b’,2:‘c’},所以處理規(guī)則同字典一樣。
- 對(duì)取值函數(shù)與賦值函數(shù)的處理
用途
- 為對(duì)象添加屬性,方法
- 克隆對(duì)象,結(jié)合新語(yǔ)法合并多個(gè)對(duì)象
- 為屬性指定默認(rèn)值
2.定義對(duì)象 - Object.defineProperty(obj, prop, descriptor)
定義屬性:Object.defineProperty(obj, prop, descriptor)
屬性在創(chuàng)建對(duì)象時(shí)就定義好了,所有特性的默認(rèn)值都為true;而當(dāng)使用defineProperty添加的屬性,特性的默認(rèn)值都為false。當(dāng)使用了getter或setter方法,不允許使用writable和value這兩個(gè)屬性?
obj ,待修改的對(duì)象
prop ,帶修改的屬性名稱
descriptor ,待修改屬性的相關(guān)描述
configurable ,屬性是否可配置。可配置的含義包括:是否可以刪除屬性( delete ),是否可以修改屬性的 writable 、 enumerable 、 configurable 屬性。 改為false之后,不能刪除修改(不可逆)。默認(rèn)true
enumerable ,屬性是否可枚舉。可枚舉的含義包括:是否可以通過(guò) for…in 遍歷到,是否可以通過(guò) Object.keys() 方法獲取屬性名稱,是改為false,for in時(shí)不會(huì)被遍歷,但使用 "."依然可訪問(wèn)。默認(rèn)true
writable ,是否為可寫,改為false,當(dāng)前屬性變?yōu)橹蛔x。。默認(rèn)true
value ,屬性的默認(rèn)值。
set ,屬性的重寫器(暫且這么叫)。一旦屬性被重新賦值,此方法被自動(dòng)調(diào)用。
get ,屬性的讀取器(暫且這么叫)。一旦屬性被訪問(wèn)讀取,此方法被自動(dòng)調(diào)用。
3.新數(shù)據(jù)類型- Symbol
Symbol是由ES6規(guī)范引入的一項(xiàng)新特性,它的功能類似于一種標(biāo)識(shí)唯一性的ID。
定義
let s1 = Symbol();let s2 = Symbol("another symbol"); // 傳入描述信息 可以是任何可以被轉(zhuǎn)型成字符串的值,如:字符串、數(shù)字、對(duì)象、數(shù)組等let s3 = Symbol();console.log(s1,s2,s3)console.log(typeof s1); // 'symbol'console.log(s1===s2,s1===s3); // false - 每個(gè)Symbol實(shí)例都是唯一的。應(yīng)用
- 由于Symbol類型的key是不能通過(guò)Object.keys()或者for…in來(lái)枚舉的,它未被包含在對(duì)象自身的屬性名集合(property names)之中,所以可以把一些不需要對(duì)外操作和訪問(wèn)的屬性使用Symbol來(lái)定義,作為對(duì)象的鍵(唯一);
- 因?yàn)檫@個(gè)特性,當(dāng)使用JSON.stringify()將對(duì)象轉(zhuǎn)換成JSON字符串的時(shí)候,Symbol屬性也會(huì)被排除在外
- 定義常量不用再去想值的內(nèi)容了
- 安全性高
- 多模塊共享唯一
未完待續(xù)…
總結(jié)
以上是生活随笔為你收集整理的ES6实用方法Object.assign、defineProperty、Symbol的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: vscode配置、使用git
- 下一篇: visio自定义图形填充