背景:我正在考虑为KeyboardEvent.key和KeyboardEvent.code编写一个polyfill。
我的建议是将旧标准中keyCode,charCode,shiftKey等的每个组合转换为新标准中的键或代码。
它可能看起来像这样:
function convertToNewKey(event) {
var key;
if (event.keyCode === 81 && event.charCode === 0 && shiftKey === false) {
key = 'q'
};
if (event.keyCode === 81 && event.charCode === 81 && shiftKey === true) {
key = 'Q'
};
if (event.keyCode === 113 && event.charCode === 113) {
key = 'q'
};
if (event.keyCode === 113 && event.charCode === 0) {
key = 'F2'
};
// etc.
return key;
}
这需要数千个'if'语句,而且我不确定它的运行速度有多快。关键事件应该快速响应用户输入。
是否有其他方式 - 例如嵌套哈希映射或字典 - 更容易编写,执行速度更快,或者两者兼而有之?
编辑:似乎哈希映射比'if'更快,尽管switch语句比两者都快,至少在某些实现中如此。 (来源:jsPerf)我可能需要做一些自己的速度测试。
还有一件事: Jan Wolter为他的research into keyboard events和他的script自动打印结果的提示。