es6新增类型——Symbol
Symbol
js数据类型:
String
Number
Null
Undefined
Object
Boolean
Symbol
Symbol:
Symbol是一种全新的数据类型,作用:产生一个独一无二的值
用法:
console.log(Symbol());//Symbol()
可以传参:这个参数(description),类型为String/Number,相当于代码注释,让开发者明白当前Symbol的意义。
var name = Symbol("姓名");
由于每一个Symbol的值都不相等,Symbol可以用来解决对象属性被覆盖的问题:
①
const obj = {
[Symbol("食物")] :"涮羊肉"
};
obj.foods = "烤羊腿"; //覆盖不了
console.log(obj);//{foods: "烤羊腿", Symbol(食物): "涮羊肉"}
②
let mySymbol = Symbol("地址");
let obj = {
[ mySymbol ] : "hello"
}
console.log(obj[mySymbol]); //hello
console.log(obj[Symbol("地址")]);//undefined
③模拟私有属性:
function Food(){
var innerName = Symbol("inner的方法名");
this[innerName] = function(){
console.log("我是私有方法")
}
this.sayHi = function(){
this[innerName](); //我是私有方法
console.log('涮羊肉很好吃');
}
}
let food = new Food();
food.sayHi();//我是私有方法 涮羊肉很好吃
Symbol.for:
Symbol.for() 并不是每次都会创建一个新的 symbol,它会首先检查给定的 参数是否已经在Symbol注册表中了,如果已经存在,则会直接返回上次存储的那个。
if(Symbol.for("address") === Symbol.for("address")){
console.log('相等'); //相等
}
还没有评论,来说两句吧...