Symbol 的使用方法
let s = Symbol();
typeof s;
//"symbol"var s1 = Symbol("foo");
var s2 = Symbol("bar");
s1 // Symbol("foo")
s2 // Symbol("bar")
s1.toString() // "Symbol(foo)"
s2.toString() // "Symbol(bar)参考链接
最后更新于
let s = Symbol();
typeof s;
//"symbol"var s1 = Symbol("foo");
var s2 = Symbol("bar");
s1 // Symbol("foo")
s2 // Symbol("bar")
s1.toString() // "Symbol(foo)"
s2.toString() // "Symbol(bar)最后更新于
// 没有参数的情况
var s1 = Symbol();
var s2 = Symbol();
s1 == s2 // false
// 有参数的情况
var s1 = Symbol("foo");
var s2 = Symbol("foo");
s1 == s2 // falsevar s1 = Symbol("My Symbol");
"your symbol is" + s1;
// TypeError: can't convert symbol to string
`your symbol is ${s1}`
// TypeError: can't convert symbol to string// 转为字符串
var s1 = Symbol("My Symbol");
String(s1) // "Symbol(My Symbol)"
s1.toString() // "Symbol(My Symbol)"
//转为布尔值
var s1 = Symbol();
Boolean(s1) //true
!s1 //false
if(s1) {
// ...
}
//转为数值就会报错var mySymbol = Symbol();
//第一种写法
var a = {};
a[mySymbol] = "Hello!";
//第二种写法
var a = {
[mySymbol]: "Hellow!"
}
//第三种写法
var a = {};
Object.defineProperty(a, mySymbol, { value: "Hellow!" });
//以上写法的结果都相同
a[mySymbol] // "Hellow!"let s = Symbol();
let obj = {
[s]: function(arg) {...}
}
//如果s不放在[]中,该属性名就是字符串,而不是Symbol
//可以采用增强的方式在书写上面的代码
let s = Symbol();
let obj = {
[s](arg) {...}
}const COLOR_RED = Symbol();
const COLOR_GREEN = Symbol();
function getComponent(color) {
switch(color) {
case: COLOR_RED:
return "red";
case: COLOR_GREEN:
return "green";
default:
throw new Error("Undefind color")
}
}function getArea(shape, options) {
var area = 0;
switch(shape) {
case: "Tringel": // 魔术字符串
area = 5*options.width*options.height;
break;
}
return area;
}
getArea("Tringel", {width: 100, height: 100}); // 魔术字符串var shapeType = {
triangle: "Tringel"
}
function getArea(shape, options) {
var area = 0;
switch(shape) {
case: shapeType.triangle: // 消除魔术字符串
area = 5*options.width*options.height;
break;
}
return area;
}
getArea(shapeType.triangle, {width: 100, height: 100}); //消除魔术字符串var shapeType = {
triangle: Symbol()
}