1. 程式人生 > >5.【ES6】Symbol新型別

5.【ES6】Symbol新型別

1.知識點

  1. ES6增加了Symbol新的原始型別

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