首页 > 解决方案 > Switch 语句如何与符号一起使用?

问题描述

我是 JavaScript 新手。请原谅,如果愚蠢的问题。

下面的代码片段很有意义。没有什么不寻常的:

const RED = 'red';
const ORANGE = 'orange';
const YELLOW = 'yellow';
const BLUE = 'blue';
const cat = 'blue';

function getThreatLevel(color){
  switch(color){
    case RED:
      return 'severe';
    case ORANGE:
      return 'high';
    case YELLOW:
      return 'elevated';
    case BLUE:
      return 'low';
    default:
      console.log("I DON'T KNOW THAT COLOR!")
  }
}

getThreatLevel(BLUE)='低'

getThreatLevel(cat)='低'

但是,将前 4 个变量的类型更改为 Symbols 时:

const RED = Symbol('red');
const ORANGE = Symbol('orange');
const YELLOW = Symbol('yellow');
const BLUE = Symbol('blue');
const cat = 'blue';

function getThreatLevel(color){
  switch(color){
    case RED:
      return 'severe';
    case ORANGE:
      return 'high';
    case YELLOW:
      return 'elevated';
    case BLUE:
      return 'low';
    default:
      console.log("I DON'T KNOW THAT COLOR!")
  }
}

getThreatLevel(BLUE)='低'

getThreatLevel(cat)=“我不知道那种颜色!”

为什么cat不再返回“低”?

标签: javascriptswitch-statementsymbols

解决方案


在第一个示例中,catBLUE保持相同的值,即不可变字符串"blue"

在第二个例子中,catBLUE持有不同的值。

顺便说一句,对 Symbol 的每次调用都会产生一个唯一的值。因此,具有相同描述(仅用于调试目的)的两个不同符号不同的。

console.log('blue' === 'blue');
console.log(Symbol('blue') === 'blue');
console.log(Symbol('blue') === Symbol('blue'));


推荐阅读