还记得es5里面的数据类型有多少种吗?
Number String Undefined Null Boolean 一共五种,NaN是数字的一种不属于类型。
如有人较真的话,其实还有另外三种引用类型,分别是Object,Array,Function。
新数据类型
es6中加入了Symbol 数据类型,Symbol表示一个变量是独一无二的。
他的只有一个唯一的作用,就是在对象中让一个key不会和其他的key重复。
// Symbol 括号中是对该属性的解释 没有具体作用
let sex =Symbol("性别");
let man = {
age:31,
sex:"女",
[sex]:"男"
}
// 你把Symbol混入对象以后 会发现遍历是获取不到这个key的
let key=Object.keys(man)
// 此时想要获取keys 需要通过Reflect.ownKeys(obj)
console.log(key);
// 只能通过对象字面量去获取 由此可见Symbol主要作用在于创建一个对象私有的属性
// 牛逼的是,你创建的是一个独一无二的值,他不可能跟其他的属性重名
console.log(man[sex]);
需要说明的是:
Symbol在map对象中意义不大,因为map对象中的key本来就是唯一不重复的
let man2 = new Map([
["name","dangyunlong"],
[sex,"man"]
])
// 但是神奇的是,通过map对象创建的却可以获取到,因为在map对象中,
// key本来就是独一无二的
//console.log(man2.keys());
另外,如果想要遍历对象的symbol属性,
可以使用 Object.getOwnPropertySymbols(obj) 方法,返回一个数组,数组中包含所有symbol属性。