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