晚上好。
我真的很想解决这个问题,并且不确定是否缺少一些愚蠢的东西,但这是我的代码和我的问题。
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')));
当我在提示框中插入正确的值时,有人可以向我解释如何;解释器?...知道检查下一行代码以显示“正确”或“控制台错误”,具体取决于我的输入。我知道我们有一个key of correct
并将其值设置为{{1 }},但是什么时候根据我的回答告诉它执行下一行代码呢?它只是解析整个代码,看到一个true语句,然后也执行附加的语句,否则执行false语句?为什么?很抱歉,如果我不清楚的话。
答案 0 :(得分:2)
您的Map
有一个键true
的条目,一个是false
的条目。通过使用与此表达式相对应的键来检索其中之一:
ans === question.get('correct')
当给定答案等于正确答案时,此表达式返回true
,否则返回false
。然后,此布尔结果将用作集合中下一次查找的键:
question.get(ans === question.get('correct'))
这可以有效地检索false
或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
或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')));
注意:以这种方式使用地图看起来并不正确。您确实应该对问题使用数组,对其他内容使用普通对象。