深入理解ES6之 符號與符號屬性

2022-11-24 19:36:52 字數 1553 閱讀 8614

在js已有的基本型別(字串,數值,布林型,null和undefined)之外,es6引入了一種新的基本型別:符號(symbol)。符號起初被設計用於建立物件私有成員。

符號沒有字面量形式,你可以使用全域性symbol函式來建立一個符號值。

let firstname = symbol();

let person = {};

person[firstname] = "nicolas";

console.log(person[firstname]);

symbol還可以接受一個額外的引數用於描述符號值。建議始終給符號提供描述資訊,以便更好的閱讀**和進行除錯。

let firstname = symbol("first name");

let person =

//讓改屬性變成只讀的

object.defineproperties(person, firstname, );

let lastname = symbol("last name");

object.defineproperties(person,

});person[lastname] = "dd";

console.log(person[firstname]);//nicolas

console.log(person[lastname]);//cc

如果要建立共享符號值,應使用symbol.for()方法而不是symbol()方法。symbol.for()接受單個字串型別的引數,作為目標符號值的識別符號,同時此引數也會成為該符號的描述資訊。

let uid = symbol.for("uid");

let object = {};

object[uid] = "12345";

console.log(object[uid]);//12345

console.log(uid);//symbol(uid)

symbol.for()方法首先會搜尋全域性符號登錄檔,看是否存在一個鍵值為“uid”的符號值。

object.keys()和object.getpropertynames()方法可以檢索物件的所有屬性和名稱,前者返回所有的可列舉屬性名稱,後者返回所有屬性名稱而無視其是否可列舉。es6新增了object.getownpropertysymbols()方法,以便可以檢索物件的符號型別屬性。

let uid = symbol.for("uid");

let first = symbol("first name");

let object = ;

object[uid] = "12345";

object[first] = "111";

console.log(object.getownpropertynames(object));//["name","age"]

console.log(object.getownpropertysymbols(object));//[symbol(uid),symbol(first name)]

深入理解ES6之 物件

在js中比較兩個值時,你可能會用相等運算子 或者嚴格相等運算子 為了避免在比較時發生強制型別轉換,許多開發者更傾向於使用後者。object.is 接受兩個引數,並且會在二者的值相等時返回true,此時要求二者的資料型別相同並且值也相等。console.log object.is 0,0 false ...

深入理解ES6之 資料解構

物件解構語法在賦值語句的左側使用了物件字面量 let node 既宣告又賦值 let node 或者先宣告再賦值 let type,name node console.log type true console.log name falsetype與name識別符號既宣告瞭本地變數,也讀取了物件的相...

深入理解ES6之 JS類的相關知識

類宣告以class關鍵字開始,其後是類的名稱 剩餘部分的語法看起來像物件字面量中的方法簡寫,並且在方法之間不需要使用逗號。class person sayname let per new person cf per.sayname cf console.log typeof person funct...