ES6物件的擴充套件

2022-08-29 13:42:13 字數 2651 閱讀 1667

es5比較兩個值是否相等,只有兩個運算子:相等運算子(==)和嚴格相等運算子(===)。它們都有缺點,前者會自動轉換資料型別,後者的nan不等於自身,以及+0等於-0。用來比較兩個值是否嚴格相等,與嚴格比較運算子(===)的行為基本一致。不同之處只有兩個:一是+0不等於-0,二是nan等於自身。

es5可以通過下面的**,部署object.is

object.defineproperty(object, 'is', 

// 針對nan的情況

return x !== x && y !== y;

},configurable: true,

enumerable: false,

writable: true

})

;

object.assign方法用於物件的合併,將源物件(source)的所有可列舉屬性,複製到目標物件(target)。

object.assign方法的第乙個引數是目標物件,後面的引數都是源物件。

var target = ;

var source1 = ;

var source2 = ;

object.assign(target, source1, source2);

target //

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

(1)為物件新增屬性

(2)為物件新增方法

(3)轉殖物件

function clone(origin) , origin);

}

上面**將原始物件拷貝到乙個空物件,就得到了原始物件的轉殖。

不過,採用這種方法轉殖,只能轉殖原始物件自身的值,不能轉殖它繼承的值。如果想要保持繼承鏈,可以採用下面的**。

function clone(origin)

(4)合併多個物件

(5)為屬性指定預設值

物件的每個屬性都有乙個描述物件(descriptor),用來控制該屬性的行為。object.getownpropertydescriptor方法可以獲取該屬性的描述物件。

描述物件的enumerable屬性,稱為」可列舉性「,如果該屬性為false,就表示某些操作會忽略當前屬性。

es5有三個操作會忽略enumerablefalse的屬性。

es6新增了乙個操作object.assign(),會忽略enumerablefalse的屬性,只拷貝物件自身的可列舉的屬性。

這四個操作之中,只有for...in會返回繼承的屬性。實際上,引入enumerable的最初目的,就是讓某些屬性可以規避掉for...in操作。比如,物件原型的tostring方法,以及陣列的length屬性,就通過這種手段,不會被for...in遍歷到。

let obj = ;

object.getownpropertydescriptor(obj, 'foo')

//

es6一共有5種方法可以遍歷物件的屬性。

(1)for...in

for...in迴圈遍歷物件自身的和繼承的可列舉屬性(不含symbol屬性)。

(2)object.keys(obj)

object.keys返回乙個陣列,包括物件自身的(不含繼承的)所有可列舉屬性(不含symbol屬性)。

(3)object.getownpropertynames(obj)

object.getownpropertynames返回乙個陣列,包含物件自身的所有屬性(不含symbol屬性,但是包括不可列舉屬性)。

(4)object.getownpropertysymbols(obj)

object.getownpropertysymbols返回乙個陣列,包含物件自身的所有symbol屬性。

(5)reflect.ownkeys(obj)

reflect.ownkeys返回乙個陣列,包含物件自身的所有屬性,不管是屬性名是symbol或字串,也不管是否可列舉。

以上的5種方法遍歷物件的屬性,都遵守同樣的屬性遍歷的次序規則。

ES6 物件擴充套件

es6 允許直接寫入變數和函式,作為物件的屬性和方法 var key1 1 var bj var bz 方法的簡寫 var ob fn2 表示式還可以用於定義方法名。var lastword last word var a a first word hello a lastword world a ...

ES6物件擴充套件

es6允許直接寫入變數和函式,作為屬性名和方法 var a b var c c 如果屬性值與屬性名一樣,我們值寫屬性名就可以 方法簡寫 add add function 定義物件屬性有兩種方法 obj.name lijixuan 2obj name lijixuan 我們原本只能用識別符號定義屬性,...

ES6 物件擴充套件

物件擴充套件主要從四個方面開展 1.簡潔表示法 2.屬性表示式 3.擴充套件運算子 4.object新增方法 let es6 console.log es5,es6 object object 在es5中,我們去定義物件,多使用鍵值對的方式來定義,在es6中,我們直接使用變數名稱來定義就可以了。是不...