對象的賦值合並:
//es6語法允許變量直接為對象的賦值,快捷方便; let liu="呵呵噠"; let long="賴皮噠"; let a={liu,long}; console.log(a) ; //es6語法允許為對象構建key值; let key='skill'; var obj={ [key]:'web'} console.log(obj.skill); //es6語法允許直接合並對象; let s={liuliu:"wowoda",age:20}; let ss={long:"賴皮"}; let sss=Object.assign(s,ss); console.log(sss);
//object.is()方法判斷是否相等;
兩等號判等會在比較時自動進行類型轉換,而三等號不會,如果類型不同,會直接返回false,
而Object.is()則是在三等號的基礎上,又特別處理了NaN、-0、+0,保證了-0和+0不再相同,
但是要注意的是Object.is(NaN, NaN)會返回true
Symbol:作為一種新的數據類型在es6橫空出世: Symbol字面意思就是象征性的,代表了某個東西的唯一性;
let myId=Symbol();
let myname=Symbol();
console.log (myname) ===>Symbol()
typeof myname ===>symbol
console.log(myId===myname) ===>false
可以認為 Symbol是一種類似字符串的基本數據類型;不能與其他類型運算;也不能隱式轉換;
一個Symbol()可以認為在內存中創建看一個新的函數(所以說小括號是函數的標志都不會錯的);
Symbol函數也可以傳入參數;參數僅僅作為對本次Symbo的描述;
let myId=Symbol("id");
let myname=Symbol("名字");
就算兩個Symbol的參數相同,他們也是不相等的;因為創建了一個新的內存空間;
Symbol最大的用處就是作為對象的屬性,來保證唯一性;
let system=Symbol();
let foo={};
foo[system]="windows"; //還可以保證key值為symbol類型的不被 for in遍歷出來;
//同樣還證明了一點:對象的訪問方式,要么以 . ;要么以["這里必須是字符串"];js的底層全部是字符串這種實現;
console.log(foo);
Symbol 還可以共享一個標志;
let sy=Symbol.for("aaa");
Symbol.for(" ")並不會每次都創建一個新的內存;最多只有一個;如果在頁面中 aaa的標志不存在則創建一個 ,有的話直接引用以前的地址;
比如:
let cccc=Symbol.for("aaa");
那么: console.log(sy===cccc); //true; 也很容易理解;最終還是保證了某個擁有 aaa描述的Symbol類型的唯一性;