ES6常用物件操作整理

2021-09-30 14:15:16 字數 3744 閱讀 9338

簡單型別資料常量

//

const實際上保證的,並不是變數的值不得改動,而是變數指向的那個記憶體位址不得改動。對於簡單型別的資料(數值、字串、布林值),值就儲存在變數指向的那個記憶體位址,因此等同於常量。

const pi = 3.1415926;

console.log(pi)

物件常量

const foo =object.freeze({});

//常規模式時,下面一行不起作用;

//嚴格模式時,該行會報錯

foo.prop = 123;

除了將物件本身凍結,物件的屬性也應該凍結。下面是乙個將物件徹底凍結的函式。

var constantize = (obj) =>

});};

物件,函式都可以簡寫

var birth = '2000/01/01';

var person =

};

commonjs模組輸出變數,就非常合適使用簡潔寫法。

var ms ={};

function

getitem(key)

function

setitem(key, value)

function

clear() ;

}module.exports =;

//等同於

module.exports =;

+0 === -0 //

true

nan === nan //

false

object.is(+0, -0) //

false

object.is(nan, nan) //

true

用於物件的合併,如果目標物件與源物件有同名屬性,或多個源物件有同名屬性,則後面的屬性會覆蓋前面的屬性。

var target = ;

var source1 = ;

var source2 = ;

object.assign(target, source1, source2);

target

//

object.assign 方法實行的是淺拷貝

var obj1 = };

var obj2 =object.assign({}, obj1);

obj1.a.b = 2;

obj2.a.b

//2

(1)為物件新增屬性

class point );

}}

(2)為物件新增方法

object.assign(someclass.prototype, ,

anothermethod()

});//

等同於下面的寫法

someclass.prototype.somemethod = function

(arg1, arg2) ;

someclass.prototype.anothermethod = function

() ;

(3)轉殖物件

function

clone(origin) , origin);

}

不過,採用這種方法轉殖,只能轉殖原始物件自身的值,不能轉殖它繼承的值。

想要保持繼承鏈,可以採用下面的**。

function

clone(origin)

(4)合併多個物件

const merge =(target, ...sources) => object.assign(target, ...sources);

const merge =(...sources) => object.assign({}, ...sources);

(5)為屬性指定預設值

const defaults =;

function

processcontent(options) , defaults, options);

console.log(options);

//...}

由於存在深拷貝的問題,defaults物件和options物件的所有屬性的值,最好都是簡單型別,不要指向另乙個物件。

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或字串,也不管是否可列舉。

es5 引入了object.keys方法,返回乙個陣列,成員是引數物件自身的(不含繼承的)所有可遍歷(enumerable)屬性的鍵名。

var obj = ;

object.keys(obj)

//["foo", "baz"]

es2017 引入了跟object.keys配套的object.values和object.entries,作為遍歷乙個物件的補充手段,供for...of迴圈使用。

var obj = ;

object.values(obj)

//["bar", 42]

(1)解構賦值

let  = ;

x //

1y //

2z //

(2)擴充套件運算子

let z = ;

let n =;

n //

程式設計實務中,如果讀取物件內部的某個屬性,往往需要判斷一下該物件是否存在。比如,要讀取message.body.user.firstname,安全的寫法是寫成下面這樣。

const firstname =(message

&&message.body

&&message.body.user

&& message.body.user.firstname) || 'default';

這樣的層層判斷非常麻煩,因此現在有乙個提案,引入了「null 傳導運算子」(null propagation operator)?.,簡化上面的寫法。

const firstname = message?.body?.user?.firstname || 'default';

ES6常用物件操作整理

簡單型別資料常量 const實際上保證的,並不是變數的值不得改動,而是變數指向的那個記憶體位址不得改動。對於簡單型別的資料 數值 字串 布林值 值就儲存在變數指向的那個記憶體位址,因此等同於常量。const pi 3.1415926 console.log pi 物件常量 const foo obj...

ES6物件導向

前言 在es5中,對於物件沒有統一規定的寫法,我們只能以函式的形式來寫乙個物件。而在es6語法中,我們有了class,constructor,extends,supper 等關鍵字來實現物件導向。下面將介紹es6物件導向的使用 class person 類的方法 showname 使用new關鍵字建...

ES6物件導向

constructor 建構函式 建構函式就是new 類名 例項化物件時執行的函式 所有類中的建構函式都叫constructor 當我們new 類名 就是執行了constructor這個函式 let b new box 5,10 物件中建構函式與當前物件的類是相同 console.log b.con...