5.【ES6】Symbol新型別
阿新 • • 發佈:2018-12-14
1.知識點
-
ES6增加了Symbol新的原始型別
-
symbol的用法
-
作為常量
-
作為屬性
-
半隱藏屬性
2.實戰
2.1 symbol新型別
定義兩個字串,對比字串的值,毫無疑問,字串的值肯定是相等的
let str1 = String("HeloWorld");
let str2 = String("HeloWorld");
console.log(str1 == str2); //結果 true
console.log(str1 === str2); //結果 true
2.2 說明
1.定義兩個symbol型別
2.檢視當前的型別 typeof 是symbol型別,toString 的值型別也是symbol
3.對比s1 s2,值肯定不一樣,為什麼呢?
symbol內部分配了一個唯一的id,雜湊值,id不相等,所以值肯定是不相等的,比較的事內部id!
let s1 = Symbol("mySymbol");
let s2 = Symbol("mySymbol");
console.log(typeof s1); //結果:symbol
console.log(s1.toString()); //結果:Symbol(mySymbol)
console.log(s1 == s2); //結果:false
console.log(s1 === s2); //結果:false
2.3 使用
1、做為常量例子
->我們定義兩個symbol型別的常量
->賦值一個初始值
->對比當前的初始值是否等於常量,輸出正確的結果
不用關心symbol裡面的值,只要關注他賦予的常量值就可以。
const Java = Symbol();
const Ruby = Symbol();
var lang = Java;
if (lang === Java) {
console.log('Java真好');
}
if (lang === Ruby) {
console.log('再學個Ruby on Rails吧。');
}
輸出:
2、作為屬性
->symbol這兩個標記作為不同的屬性名而區分開
->分別定義兩個不同的屬性
let s1 = Symbol("mySymbol");
let s2 = Symbol("mySymbol");
var obj = {};
obj[s1] = "helo";
obj[s2] = "world";
console.log(obj);
console.log(obj[s1]);
console.log(obj[s2]);