1.Symbol:新的数据类型,表示一个不会重复的值
//1.Symbol:新的数据类型,表示一个不会重复的值
//不是函数,不可以new
let sym = Symbol('33');
console.log(typeof sym);//symbol
//Symbol返回的值不会相同
let sym2 = Symbol('aa');
let sym3 = Symbol('aa');
console.log(sym2 === sym3);//false
2.Symbol.for()方法
//Symbol.for()方法
//定义到Symbol的值
//并且会在全局注册key-Symbol箭值对
let sym4 = Symbol.for('aa');
let sym5 = Symbol.for('aa');
console.log(sym4 === sym5);//true
console.log(sym4);//true
//Symbol.keyFor()方法
//通过某个key获取对应的key值
let sym6 = Symbol.for("bb");
let sym7 = Symbol.keyFor(sym6);
console.log(sym7);//bb
3.使用场景
//作用:
//定义不会重名的属性
let name = Symbol.for('name');
let obj = {
name: '小张',
age: '22',
sex: '男',
[name]: '张'
}
console.log(obj)//{name: "小张", age: "22", sex: "男", Symbol(name): "张"}
console.log(obj.name)//小张
console.log(obj[Symbol.for('name')])//张
obj[Symbol.for('name')] = '张XX';
console.log(obj)//{name: "小张", age: "22", sex: "男", Symbol(name): "张XX"}
//定义常量
//可以利用这个特性,为对象定义一些非私有的、但又希望只用于内部的方法
4.Symbol定义属性不会被(for in)(for of)遍历
let name2 = Symbol.for('name');
let obj2 = {
name: '小张',
age: '22',
sex: '男',
[name2]: '陈XX'
}
//Symbol定义属性不会被(for in)(for of)遍历
for (let i in obj2) {
console.log(obj2[i]) //小张 22 男
}
//需要用reflect来获取全部的属性
console.log(Reflect.ownKeys(obj2))//["name", "age", "sex", Symbol(name)]
//遍历
for (let i in Reflect.ownKeys(obj2)) {
console.log(obj2[Reflect.ownKeys(obj2)[i]]) //小张 22 男 陈XX
}