这已经发生了很多次,直到现在我才忽略它,但是它让我烦恼,因为我不确定我的代码是否正确。
问题在于,当我在console.log(TextA)或(TextB)中然后将值放入变量时,控制台将记录我推送给变量的值。
以下示例:
我的CodeCademy代码是:
var slaying = true;
var youHit = (Math.floor(Math.random() * 2) == 1);
var damageThisRound = Math.floor(Math.random()*5 + 1);
var totalDamage = 0;
while (slaying) {
if (youHit) {
console.log("Congrats, you hit");
} else {
console.log("You were defeated by the dragon");
}
slaying = false;
}
我的控制台日志是:
Congrats, you hit
false
这是否会发生在其他人身上?这只是CodeCademy系统的一个错误,还是我的Javascript不正确?
答案 0 :(得分:2)
这是因为他们的解释器与浏览器控制台非常相似,它会评估您放入其中的所有代码,并且javascript中的所有操作都具有返回值。试试这个例子:
var y = (foo = 'x');
console.log(y);
赋值操作具有返回值。当您使用eval
和new Function
之类的东西来评估代码时,这会变得更加明显,因为它们会显示最后解释的代码行的值,然后您会看到偶数do..while
语句有一个返回值。如果您更改while
语句的最后一行,您会看到记录的是最后一个值,而不是false
。
以下是使用eval
的另一个可能更好的示例:
eval('var foo = 0; i = 0; while( i < 2 ) { i++; foo = i * 9; } ')
请注意,我没有明确记录任何内容,但由于foo = i * 9
(其中i = 2
)是评估的最后一行,您将在控制台中看到18
。另请注意,如果我在该语句中包含var
,您会看到1
,因为i++
将是返回值的最后一个操作(以增加混淆,{{ 1}}作业返回var
)。