ES6學習筆記(物件新增方法)

2022-06-11 22:18:11 字數 4199 閱讀 9249

1.object.is()

es5 比較兩個值是否相等,只有兩個運算子:相等運算子(==)和嚴格相等運算子(===)。它們都有缺點,前者會自動轉換資料型別,後者的nan不等於自身,以及+0等於-0

object.is就是部署這個演算法的新方法。它用來比較兩個值是否嚴格相等,與嚴格比較運算子(===)的行為基本一致。

object.

is('foo'

,'foo'

)// true

object.

is(,

)// false

不同之處只有兩個:一是+0不等於-0,二是nan等於自身。

+

0===-0

//true

nan===

nan// false

object.

is(+0,

-0)// false

object.

is(nan

,nan

)// true

2.object.assign()

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

const target =

;const source1 =

;const source2 =

;object.

assign(

target, source1, source2)

;target//

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

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

const target =

;const source1 =

;const source2 =

;object.

assign(

target, source1, source2)

;target//

常見用途

(1)為物件新增屬性

class point);

}}

(2)為物件新增方法

object.

assign(

someclass.prototype,

,anothermethod()}

);// 等同於下面的寫法

someclass.prototype.somemethod =

function

(arg1, arg2)

;someclass.prototype.anothermethod =

function()

;

(3)轉殖物件

對於object.assign()而言, 如果物件的屬性值為簡單型別(string, number),通過object.assign({},srcobj);得到的新物件為『深拷貝』如果屬性值為物件或其它引用型別,那對於這個物件而言其實是淺拷貝的

function

clone(

origin)

, 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)

;// ...

}

3. object.setprototypeof()和object.getprototypeof()

__proto__屬性

沒有寫入 es6 的正文,而是寫入了附錄,原因是__proto__前後的雙下劃線,說明它本質上是乙個內部屬性,而不是乙個正式的對外的 api,只是由於瀏覽器廣泛支援,才被加入了 es6。標準明確規定,只有瀏覽器必須部署這個屬性,其他執行環境不一定需要部署,而且新的**最好認為這個屬性是不存在的。因此,無論從語義的角度,還是從相容性的角度,都不要使用這個屬性,而是使用下面的object.setprototypeof()(寫操作)、object.getprototypeof()(讀操作)、object.create()(生成操作)代替。

object.setprototypeof方法的作用與__proto__相同,用來設定乙個物件的prototype物件,返回引數物件本身。它是 es6 正式推薦的設定原型物件的方法。

let proto =

;let obj =

;object.

setprototypeof(

obj, proto)

;proto.y =20;

proto.z =40;

obj.x// 10

obj.y// 20

obj.z// 40

object.getprototypeof,用於讀取乙個物件的原型物件。

function

rectangle(

)const rec =

newrectangle()

;object.

getprototypeof(

rec)

=== rectangle.prototype// true

object.

setprototypeof(

rec, object.prototype)

;object.

getprototypeof(

rec)

=== rectangle.prototype// false

4.object.keys(), object.values()和object.entries()

var obj =

;object.

keys(

obj)

// ["foo", "baz"]

let = object;

letobj = ;

for (let

keyof

keys(obj))

for (let

value

ofvalues(obj))

for (let [key, value] of

entries(obj))

5.object.fromentries()

object.fromentries()方法是object.entries()的逆操作,用於將乙個鍵值對陣列轉為物件。

object.

fromentries([[

'foo'

,'bar'],

['baz',42

]])//

ES6新增方法

變數宣告 let 1.區域性變數,只能在區域性呼叫 2.不能重複宣告 3.不會提公升變數 console.log a let a const 1.宣告乙個常量 2.宣告必須賦值 3.不能被修改 4.變數名建議大寫,如 const pi 3.14 變數型別 資料型別 1.數字 number 2.字串 ...

ES6新增常用方法

let 1.在塊級作用域內部有效 迴圈中迴圈變數部分和迴圈體內部是不同作用域 不存在變數提公升,先宣告後使用,否則報錯 4.塊級作用域內只要存在let,所生命的變數就 繫結 這個區域,不受外界影響 var a for let i 1 i 10 i a 6 6塊級作用域與函式宣告 允許在塊級作用域內宣...

ES6陣列新增方法

1 字串轉陣列 個人感覺有些類似於arr.split let str hello console.log array.from str array 5 h e l l o 2 將類陣列物件轉換為真正陣列 let arrlist let arr array.from arrlist console.l...