为什么我的 Javascript 将未记录的值记录到 CodeCademy 控制台?

Why is my Javascript logging Unlogged values to the CodeCademy Console?

这已经发生了很多次,直到现在我才忽略它,但它一直困扰着我,因为我不确定我的代码是否正确。

问题是,当我 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 不正确?

这是因为它们的解释器,很像浏览器控制台,会评估您放入其中的所有代码以及 javascript 中的所有操作都有一个 return 值。例如试试这个:

var y = (foo = 'x');
console.log(y);

赋值操作有一个 return 值。当您使用 evalnew Function 之类的东西来评估代码时,这会变得更加明显,因为它们会向您显示最后解释的代码行的值,然后您会看到甚至 do..while 语句有一个 return 值。如果更改 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++ 将是 returned 值的最后一个操作(添加到混乱,var 作业 return undefined).