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