1、六大数据类型
String字符串类型、Number数字类型、Object对象类型、Boolean布尔值类型、Null空值、Undefined 未定义
symbol出现原因:
解决对象的属性名冲突
使用:
1 // 定义一个symbol类型的变量 2 let symbol = Symbol(); 3 console.log(symbol); 4 console.log(typeof symbol); //symbol 类型
特点:任何一个Symbol定义的都是独一无二的。
2、API
1、获取Symbol定义的属性 Object.getOwnPropertySymbol()
1 console.log(Object.getOwnPropertySymbols(Person)); //[Symbol(name)]
2、获取全部属性 Reflect.ownKeys() ;
3、Symbol.for()创建的时候会把Symbol的值放到全局环境中,供以后的Symbol使用。
4、Symbol.keyFor() 搜索全局中是否有Symbol.for定义的变量 有的话拿过来用,没有重新定义
1 <script> 2 let name = Symbol('咱这是名字的描述'); 3 let Person = { 4 name: '名字普通', 5 [name]: '名字Symbol定义', 6 } 7 8 // 获取全部的属性 9 console.log(Reflect.ownKeys(Person)); // ["name", Symbol(咱这是名字的描述)] 10 // Symbol.for(); 在创建的时候会把symbol的值登记在全局环境中,供以后Symbol.for()来搜索 11 let name1 = Symbol.for('name'); 12 let name2 = Symbol.for('name'); 13 console.log(name1 === name2); //true 14 15 // Symbol.keyFor(); 搜索全局中是否有Symbol.for定义的变量,如果有返回 如果没有返回undefined 16 console.log(Symbol.keyFor(name1)); //name 17 18 console.log(Symbol.keyFor(name)); //undefined 19 20 </script>