ES6——Symbol

2019-04-23  本文已影响0人  benbensheng

1. 概述

1.1 基本用法

let s =Symbol();
console.log(typeof s);

let s1 =Symbol();
let s2 =Symbol();
console.log(s1===s2); //false

1.2 接受一个字符串作为参数

表示对 Symbol 实例的描述,主要是为了在控制台显示,或者转为字符串时,比较容易区分

let s1=Symbol("s1");
let s2=Symbol();
let s3=Symbol();
console.log(s1.toString()); //Symbol(s1)
console.log(s2); //Symbol()
console.log(s3); //Symbol()

2. 使用场景

2.1 作为属性名

//1
let sy=Symbol("key1");
let obj={
    [sy]:"kk"
}
console.log(obj[sy]); //kk
console.log(obj);  //{ [Symbol(key1)]: 'kk' }
//2
let sy=Symbol("key1");
let obj={};
obj[sy]="kk";
console.log(obj[sy]); //kk
console.log(obj);  //{ [Symbol(key1)]: 'kk' }

//不能使用.符号
let sy=Symbol("key1");
let obj={};
obj[sy]="kk";
console.log(obj.sy);  //undefined

2.2 定义常量

const COLOR_RED = Symbol();
const COLOR_YELLOW = Symbol();
const COLOR_BLUE = Symbol();
 
function getConstantName(color) {
    switch (color) {
        case COLOR_RED :
            return "red";
        case COLOR_YELLOW :
            return "YELLOW ";
        case COLOR_BLUE:
            return "BLUE";
        default:
            throw new Exception("Can't find this color");
    }
}
console.log(getConstantName(COLOR_RED));

2.3 消除魔术字符串

魔术字符串指的是,在代码之中多次出现、与代码形成强耦合的某一个具体的字符串或者数值。风格良好的代码,应该尽量消除魔术字符串,改由含义清晰的变量代替。

function getArea(shape, options) {
  let area = 0;

  switch (shape) {
    case 'Triangle': // 魔术字符串
      area = .5 * options.width * options.height;
      break;
    /* ... more code ... */
  }

  return area;
}

getArea('Triangle', { width: 100, height: 100 }); // 魔术字符串

改进后

const shapeType = {
triangle: Symbol()
};

function getArea(shape, options) {
  let area = 0;
  switch (shape) {
    case shapeType.triangle:
      area = .5 * options.width * options.height;
      break;
  }
  return area;
}
getArea(shapeType.triangle, { width: 100, height: 100 });
上一篇下一篇

猜你喜欢

热点阅读