變量和函數均有簡單寫法es6
簡單寫法的應用:
一、在commonJs模塊中使用。
module.exports = {getItem,setItem,clear}
至關於
module.exports = {數組
getItem:getItem, setItem:setItem, clear:clear
}
二、避免因爲是關鍵字而致使語法解析錯誤(自認爲這點不太好)函數
var obj = { class () {} } 至關於 var obj = { 'class':function(){} }
定義對象屬性有兩種方法:
一、直接用標識符做爲屬性名。
二、用表達式做爲屬性名。es5
es5寫法:(只能用標識符的方法)
spa
es6寫法:(形式更加多樣化)
(es6用表達式定義方法名)prototype
(注意:若是屬性名錶達式是對象,會自動將對象轉爲字符串)code
一、正常返回函數的函數名。
對象
二、對象方法使用了取值函數(getter)和存值函數(setter)。
繼承
三、使用bind()函數時,name屬性的返回值。
name屬性會返回‘bound’加上原函數的名字。
圖片
四、對象方法是個Symbol值,name屬性返回的是這個Symbol值。
【1】Object.is() --->比較兩個值是否相等。
避免了es5比較值的兩個缺點:
1) +0和-0的問題。
2)NaN的問題
【2】Object.assign() --->將全部可枚舉屬性複製到目標對象。
注意:只有第一個參數是目標對象,其餘參數都是源對象。
目標對象與源對象有同名屬性,後面的屬性會覆蓋前面的屬性。
只有一個參數的狀況:
一、直接將該參數返回。
![圖片上傳中...]
二、將不是對象的參數,先轉化爲對象。
三、用undefined和null做爲參數,會報錯。由於這兩沒法轉換爲對象。
可是若是undefined和null不做爲首參數,是不會報錯的,會把沒法轉爲對象的跳過。
四、除了對象外,其餘類型做爲源參數,也不會報錯。但只有字符串會以數組的形式複製到目標對象。
五、屬性名爲Symbol值的屬性會被Object.assign複製。
複製的只是對象引用,任何對象的變化都會反應到目標函數上。不少時候並非開發者想要的結果。要注意使用。
(1)改變源對象中的值,也會改變目標對象中相應的值,由於是淺複製,複製的只是對象的引用。
(2)Object.assign是替換而不是添加。
(3)Object.assign能夠用處理數組,可是會把數組當作對象來處理。
__proto__:用來讀取和設置對象的prototype對象。
__proto__是內部屬性,不管從語義仍是兼容性都最好不用這個屬性。它不是一個正式的對外的API。
最好用setPrototypeOf和getPrototypeOf取代__proto__
setPrototypeOf()
一、將proto對象設置爲obj對象的原型
二、這個方法會把第一參數轉換爲對象,因此undefined和null做爲第一參數,會報錯。
三、setPrototypeOf()方法會返回,返回的就是第一個參數。
getPrototypeOf()
讀取某個對象的原型對象
一樣:若是參數不是對象會被轉換爲對象,同理,undefined和null做爲參數會報錯。
一、Object.keys() 返回鍵名 --->返回的是一個數組
二、Object.values() 返回鍵值 --->返回的是一個數組
注意:返回的順序是有規則的,以下圖
三、Object.entries() 返回鍵值對 --->返回的是一個數組
注意:若是對象的屬性名是一個Symbol值,該屬性就會被忽略。
一、解構賦值是淺複製,複製的值的引用,而不是值的副本。
二、解構賦值不會複製繼承自原型對象的屬性。