Gre*_*Gum 1 javascript ecmascript-6
我正在学习ES6的Symbol功能.
所以在节点中,我写下以下内容(实际上是在Typescript中).它编译得很好,但控制台记录"未找到"我做错了什么?在我看来,它应该工作.
这个例子来自这篇文章
"use strict"
var levels = {
DEBUG: Symbol('debug'),
INFO: Symbol('info'),
WARN: Symbol('warn'),
};
function log(level: Symbol, message)
{
switch(level)
{
case Symbol.for('debug'):
console.log(`Debug Message: ${message}`);
break;
case Symbol.for('info'):
console.log(`Info Message: ${message}`);
break;
case Symbol.for('warn'):
console.log(`Warn Message: ${message}`);
break;
default:
console.log("Not found");
}
}
log(levels.DEBUG, 'debug message');
log(levels.INFO, 'info message');
Run Code Online (Sandbox Code Playgroud)
更新
正如在接受的答案中所指出的,这将起作用:
var levels = {
DEBUG: Symbol.for('debug'),
INFO: Symbol.for('info'),
WARN: Symbol.for('warn')
};
function log(level: Symbol, message)
{
switch(level)
{
case Symbol.for('debug'):
console.log(`Debug Message: ${message}`);
break;
case Symbol.for('info'):
console.log(`Info Message: ${message}`);
break;
case Symbol.for('warn'):
console.log(`Warn Message: ${message}`);
break;
default:
console.log("Not found");
}
}
log(levels.DEBUG, 'debug message');
log(levels.INFO, 'info message');
Run Code Online (Sandbox Code Playgroud)
第二次更新
另外,正如@Felix Kling所指出的,这更好:
var levels = {
DEBUG: Symbol('debug'),
INFO: Symbol('info'),
WARN: Symbol('warn')
};
function log(level: Symbol, message)
{
switch(level)
{
case levels.DEBUG:
console.log(`Debug Message: ${message}`);
break;
case levels.INFO:
console.log(`Info Message: ${message}`);
break;
case levels.WARN:
console.log(`Warn Message: ${message}`);
break;
default:
console.log("Not found");
}
}
Run Code Online (Sandbox Code Playgroud)
Symbol('somestring');
Run Code Online (Sandbox Code Playgroud)
不创建全局符号.
Symbol.for('somestring');
Run Code Online (Sandbox Code Playgroud)
获取先前定义的全局符号或创建新的全局符号.
因此,第一次检查case语句时,您将创建新符号,而不是检查先前定义的符号.
如果您Symbol.for('somestring')在首先定义符号时使用,则稍后检查它们时会找到它们.
| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |