【问题标题】:How do Switch statement work with Symbols?Switch 语句如何与符号一起使用?
【发布时间】:2020-01-12 11:03:35
【问题描述】:

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

下面的 sn-p 是有道理的。没什么特别的:

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 个变量的类型更改为符号时:

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 不再返回“低”?

【问题讨论】:

标签: javascript switch-statement symbols


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢。我明白了我的困惑根源来自哪里。如果没有可随时映射的变量/符号,JS 是否默认将案例视为字符串? case BLUE: 在第一个实例中被视为字符串,从而匹配 const Blueconst cat。但是,第二个实例中的 case BLUE: 仅与符号 BLUE 匹配
  • @Digitful – “JS 是否默认将 case 视为字符串”— 不,它是一个表达式。 BLUE 是一个常量,因此表达式解析为常量的值。如果您没有定义它,那么它将是一个参考错误。 (你从来没有定义过const Blue,只有const BLUE
  • 知道了。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 2023-04-10
  • 1970-01-01
  • 2020-01-10
  • 1970-01-01
  • 2016-01-02
  • 2016-05-04
相关资源
最近更新 更多