javascript - JavaScript 研究。Map() 代码是如何执行的?
问题描述
晚上好。
我真的很难解决这个问题,我不确定我是否错过了一些非常愚蠢的东西,但这是我的代码和我的问题。
const question = new Map();
question.set('question', 'What is the official name of the latest major JavaScript version?');
question.set(1, 'ES5');
question.set(2, 'ES6');
question.set(3, 'ES2015');
question.set(4, 'ES7');
question.set('correct', 3);
question.set(true, 'Correct answer :D');
question.set(false, 'Wrong, please try again!');
for (let [key, value] of question.entries()) {
if (typeof(key) === 'number') {
console.log(`Answer ${key}: ${value}`);
}
}
const ans = parseInt(prompt('Write the correct answer'));
console.log(question.get(ans === question.get('correct')));
当我在提示框中插入正确的值时,有人可以向我解释一下吗?解释器?...知道检查下一行代码以在控制台中显示“正确”还是“错误”?取决于我的输入。我知道我们有 akey of correct
并且它的值设置为3
但我们什么时候告诉它执行下一行代码取决于我的回答?它是否只是解析整个代码,查看一个真实的语句,然后执行它附加的任何内容,否则执行错误的语句?如何,为什么?如果我没有通过,请道歉很清楚。
解决方案
您Map
有一个 key 条目true
和一个false
. 其中一个是通过使用与此表达式对应的键来检索的:
ans === question.get('correct')
true
当给定答案等于正确答案时,此表达式返回,false
否则返回。然后将此布尔结果用作集合中下一次查找的键:
question.get(ans === question.get('correct'))
这有效地检索了存储在 Map 中的false
or的值。true
因此正确的短语被检索(并显示)。
如果你想把那条神奇的线写得更详细一点,它可能看起来像这样:
let output;
if (ans === question.get('correct')) { // get() returns 3 here.
output = question.get(true); // This retrieves 'Correct answer :D'
} else {
output = question.get(false); // This retrieves 'Wrong, please try again!'
}
console.log(output);
但是要意识到ans === question.get('correct')
布尔表达式是怎样的,这意味着它代表false
or true
,正是您想要作为值传递的内容question.get
,以便检索要输出的短语。
因此,if
您可以执行以下操作,而不是构造:
let isCorrect = (ans === question.get('correct')); // false or true
let output = question.get(isCorrect); // This retrieves one of the two phrases
console.log(output);
这三行所做的可以缩短为一行:
console.log(question.get(ans === question.get('correct')));
注意:以这种方式使用地图看起来不正确。你真的应该为问题使用一个数组,为其他东西使用普通对象。
推荐阅读
- multithreading - 阻塞,暂停和睡眠有什么区别
- ios - GradientLayer 与 Swift 中的单元格标签重叠?
- loopback - 环回:按日期的年份排序
- javascript - 应用加速和停止延迟
- c# - C#中的位图类是否在内部逐列存储像素
- session - 我是否需要注销从创建的解析器改编的会话?
- hive - 蜂巢中的分桶和分区之间的区别?
- javascript - 停止 javascript 代码块的所有触发事件
- vim - [Vim][Markdown] 如何禁用 url 折叠?
- intercom - 使用 Intercom 的 API 从分段请求用户时结果不一致