我正在學習ES6的符號功能。比較Javascript符號不起作用
所以在節點中,我寫了下面的內容(實際上是在Typescript中)。它編譯好,但控制檯日誌「找不到」我做錯了什麼?在我看來,它應該工作。
這個例子來自this文章
"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');
更新
作爲公認的答案中指出,這將工作:
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');
第二次更新
此外,由@Felix克林指出,這是更好的:
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");
}
}
你有爲什麼不起作用的答案。但是,我建議不要使用Symbol.for,而是使用'case levels.DEBUG:'來代替。 –