ES6__Symbol

 1 /**
 2  * Symbol
 3  */
 4 
 5 /**
 6  * 1 什么是 Symbol ?
 7  *  Symbol,表示独一无二的值。它是 JS 中的第七种数据类型。
 8  */
 9 
10 // 基本的数据类型: Null Undefined Number Boolean String Symbol
11 // 引用数据类型:Object
12 
13 let s1 = Symbol();
14 
15 let s2 = Symbol();
16 
17 // console.log(typeof s1); // 'symbol'
18 // 
19 // console.log(s1 === s2);
20  
21 
22 // Symbol 函数前不能使用 new 否则会报错,原因在于 Symbol 是一个原始类型的值,不是对象。
23 
24 // let s3 = new Symbol();
25 
26 // console.log(s1);
27 // console.log(s2);
28 
29 // Symbol 函数接收一个字符串作为参数,表示对Symbol的描述,主要是为了在控制台显示,或者转为字符串的时候,比较容易区分
30 
31 // let s3 = Symbol('miaov');
32 // let s4 = Symbol('leo');
33 // 
34 // console.log(s3, s4);
35 // 
36 // 
37 // console.log(Symbol('momo') === Symbol('momo'));
38 
39 /**
40  * 2 Symbol 数据类型的转换
41  */
42 
43 // console.log(String(Symbol('miaov'))); // Symbol(miaov)
44 // console.log(Symbol('leo').toString()); // Symbol(leo)
45 // 
46 // console.log(!!Symbol()); // true
47 // console.log(Number(Symbol()));
48 
49 // console.log(Symbol('momo') + 'pangzi');
50 // console.log(Symbol('momo') * 100);  不能做任何运算。
51 
52 
53 /**
54  * 3 作为对象的属性名
55  */
56 
57 // let yyy = Symbol('yyy');
58 // 
59 // const obj = {};
60 // 
61 // obj[yyy] = 'hello';
62 // 
63 // console.log(obj);
64 // 
65 // console.log(obj[yyy]);
66 
67 // let ss = Symbol('ss');
68 // 
69 // const data = {
70 //   [ss]: 'miaov'
71 // };
72 // 
73 // console.log(data);
74 // 
75 // console.log(data[ss]);
76 
77 const data = {
78   [Symbol()]: 123,
79   a: 1,
80   b: 2
81 };
82 
83 console.log(data);
84 console.log(data['Symbol()']);
85 
86 // 不能被for...in循环遍,历虽然不能被遍历,但是也不是私有的属性,可以通过Object.getOwnPropertySymbols方法获得一个对象的所有的Symbol属性
87 
88 for(let i in data){
89   console.log(i);
90 }
91 
92 console.log(Object.getOwnPropertySymbols(data)); // [Symbol()]
93 
94 console.log(data[Object.getOwnPropertySymbols(data)[0]]);

 

posted @ 2018-04-09 14:32  晓之殇  阅读(211)  评论(0编辑  收藏  举报