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...