ES6引入的一种新的原始数据类型Symbol,表示独一无二的值。Symbol函数可以接受参数,表示对于这个唯一值的描述。属于基本数据类型,Symbol()函数会返回symbol类型的值
// 创建symbol值
let sy1 = Symbol('hello');
let sy2 = Symbol();
console.log(sy1 == sy2);
// 为了解决冲突
let obj = {
name: 'zs',
age: 12
}
// 新增属性 修改属性
let sy3 = Symbol('name');
let obj1 = {
...obj,
// 属性名是变量名时使用中括号
[sy3]: "myname"
}
console.log(obj1)
利用Symbol消除魔术字符串
利用Symbol值的独一无二的特性,把代码中多次出行并且与代码行程强耦合关系的字符串或者数字替换掉
let shapes = {
SJX: Symbol('三角形'),
JX: Symbol('矩形'),
YX: Symbol('圆形')
}
function computedArea(shape, options) {
let result = 0
switch (shape) {
case shapes.SJX:
result = .5 * options.width * options.height
break;
case shapes.JX:
result = options.width * options.height
break;
case shapes.YX:
result = Math.PI * options.r * options.r
break;
default:
result = -1
break;
}
return result
}
let result = computedArea(shapes.SJX, { width: 10, height: 20 })
console.log(result);