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有三個操作會忽略enumerable
為false
的屬性。
es6新增了乙個操作object.assign()
,會忽略enumerable
為false
的屬性,只拷貝物件自身的可列舉的屬性。
這四個操作之中,只有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中,我們直接使用變數名稱來定義就可以了。是不...