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

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

本文关键字:记录 CodeCademy 控制台 为什么 Javascript 我的      更新时间:2023-09-26

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

问题是,当我控制台.log(TextA)或(TextB)然后将值放入变量中时,控制台将记录我推送到变量的值。

示例如下:

我的代码代码是:

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 中的所有操作都有一个返回值。例如,尝试一下:

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

赋值操作具有返回值。当您使用 evalnew 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++将是返回值的最后一个操作(为了增加混淆,var赋值返回undefined)。