一、symbol基本使用
ES6引入一种新的原始数据类型symbol,表示独一无二的值。它是js的第七种数据类型。类似于字符串的数据类型。
1.特点:
(1)值是唯一的,用来解决命名冲突
(2)值不能与其他数据类型进行运算
(3)symbol定义的对象属性不能使用for…in循环遍历,但是可以使用Reflect.ownKeys来获取对象所有的键名。
创建symbol的方法:
let a=Symbol();
let b=Symbol('aa');
let c=Symbol('aa');
console.log(b);//symbol(aa);
console.log(a==b);//false
使用symbol.for()创建的symbol,若赋值一样,则symbol相等
let d=Symbol.for("aa");
console.log(d);//symbol(aa)
let d=Symbol.for("aa");
let e=Symbol.for("aa");
console.log(d===e);//true
二、给对象添加symbol类型的属性或方法
方法一:
//向对象中添加symbol类型的属性和方法,up,down
let game={
name:"俄罗斯方块",
};
//定义一个对象方法
let methods={
up:Symbol(),
down:Symbol()
};
// game.up=function(){
//这种添加up方法有风险,无法确定game中是否已经存在up方法了
//}
game[methods.up]=function(){
console.log("我可以上移");
};
game[methods.down]=function(){
console.log("我可以上移");
};
console.log(game);
game[methods.up]();//调用这个方法
方法二:
let up=Symbol();
let down=Symbol();
let game={
name:"俄罗斯方块",
[up]:function(){
console.log("我可以上移");
},
[down]:function(){
console.log("我可以下移");
},
};
game[up]();
三、symbol的内置值