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]);