javascript - 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
不再返回“低”?
解决方案
在第一个示例中,cat
并BLUE
保持相同的值,即不可变字符串"blue"
。
在第二个例子中,cat
并BLUE
持有不同的值。
顺便说一句,对 Symbol 的每次调用都会产生一个唯一的值。因此,具有相同描述(仅用于调试目的)的两个不同符号是不同的。
console.log('blue' === 'blue');
console.log(Symbol('blue') === 'blue');
console.log(Symbol('blue') === Symbol('blue'));
推荐阅读
- postgresql - (文章的未知属性“user_id”。)heroku 错误
- c++ - 尝试将已经存在的数组的反向存储到另一个数组中时出现 C++ 错误。不能使用指针
- c++ - 来自外部文件 C++ 的函数调用
- swift - 使用计数器变量隐藏许多标签
- c++ - 使用类中的方法作为运算符为类的私有成员赋值
- php - 使用密码短语的 PHP 请求
- python - 在 Python 中使用大型数据集实现 OOP 的好方法
- hibernate - mssql-jdbc MS SQL Server JDBC 驱动程序准备好的语句缓存性能问题与 Hikari CP
- ios - lerna 包内的 React-native 应用程序
- python - Python URL 编码错误