ES6引入了一种新的原始数据类型Symbol, 表示独一无二的值。它是JavaScript语言的第七种数据类型( Number 、 String 、 Boolean 、 Objec t、 null 和 undefined ),是一种类似于字符串的数据类型。
Symbol特点
-
Symbol 的值是唯一的,用来解决命名冲突的问题
-
Symbol值不能与其他数据进行运算
-
Symbol 定义的对象属性不能使用for..in 循环遍历,但是可以使用Reflect.ownKeys来获取对象的所有键名
创建Symbol
//创建Symbol
let s = Symbol();
console.log(s,typeof s); //Symbol() "symbol"
let s2 = Symbol('贺文靖'); //Symbol 是一个函数
let s3 = Symbol('贺文靖');
console.log(s2 === s3);//false
let s4 = Symbol.for('美女'); //此时,Symbol成为一个对象
let s5 = Symbol.for('美女');
console.log(s4 === s5);//true
对象添加Symbol类型的属性
//向对象添加方法 up down
let game = {};
//声明一个对象
let methods = {
up: Symbol(),
down: Symbol()
};
game[methods.up] = function () {
console.log("我可以上升");
};
game[methods.down] = function () {
console.log("我可以下降");
};
//调用方法
game[methods.up]();
这里调用我只知道用另一种方式:先在对象youxi外定义变量let say = Symbol('say')
再把对象youxi内部中括号的Symbol('say')替换成刚刚在外面定义的变量say,即[say]: function..
最后在对象youxi外部调用:youxisay这样就可以调用"我可以发言"那个方法了
let say = Symbol('say');
let zibao = Symbol('zibao');
/* let youxi = {
name: '狼人杀',
[Symbol('say')]: function () {
console.log('我可以发言');
},
[Symbol('zibao')]: function () {
console.log('我可以自爆');
}
};*/
let youxi = {
name: '狼人杀',
[say]: function () {
console.log('我可以发言');
},
[zibao]: function () {
console.log('我可以自爆');
}
};
youxi[say]();