簡單型別資料常量
//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)轉殖物件
functionclone(origin) , origin);
}
不過,採用這種方法轉殖,只能轉殖原始物件自身的值,不能轉殖它繼承的值。
想要保持繼承鏈,可以採用下面的**。
functionclone(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...