Javascript 为什么这个条件有效?

Javascript 为什么这个条件有效?,javascript,function,conditional,Javascript,Function,Conditional,这个条件是如何工作的: function play(){ if (typeof gameInterval != "undefined") clearInterval(gameInterval); gameInterval = setInterval(gameLoop, 100); allowPressKeys = true; } 变量gameInterval仅在此函数中定义,没有全局变量。 因此,当调用play()时,gameIn

这个条件是如何工作的:

    function play(){
    if (typeof gameInterval != "undefined")
        clearInterval(gameInterval);
        gameInterval = setInterval(gameLoop, 100);
        allowPressKeys = true;
}
变量gameInterval仅在此函数中定义,没有全局变量。
因此,当调用play()时,gameInterval是未定义的。由于这个条件在gameInterval未定义时会起作用,我不明白为什么它会起作用。有人能解释一下吗?我试图理解这一点,以便稍后在代码中对其进行操作。

我假设您希望将其与未定义的值进行比较<代码>游戏间隔!==未定义的(无引号)可能是您要查找的内容


我假设您想将其与未定义的值进行比较<代码>游戏间隔!==未定义的(无引号)可能是您要查找的内容


您没有在任何地方声明变量,因此它在全局范围内声明,因此typeof!=“未定义”

总是调用,因为它不在if范围内,这是它正常工作的方式

if(a的类型==“未定义”){
var a=5;
console.log('OK');

}
您没有在任何地方声明变量,因此它在全局范围内声明,因此typeof!=“未定义”

总是调用,因为它不在if范围内,这是它正常工作的方式

if(a的类型==“未定义”){
var a=5;
console.log('OK');

}
满足条件时发生的唯一事情是:

clearInterval(gameInterval);
接下来的两行:

gameInterval = setInterval(gameLoop, 100);
allowPressKeys = true;
总是被执行

将代码格式化为这样更容易理解:

function play(){
    if (typeof gameInterval != "undefined") {
        clearInterval(gameInterval);
    }
    gameInterval = setInterval(gameLoop, 100);
    allowPressKeys = true;
}

满足条件时发生的唯一情况是:

clearInterval(gameInterval);
接下来的两行:

gameInterval = setInterval(gameLoop, 100);
allowPressKeys = true;
总是被执行

将代码格式化为这样更容易理解:

function play(){
    if (typeof gameInterval != "undefined") {
        clearInterval(gameInterval);
    }
    gameInterval = setInterval(gameLoop, 100);
    allowPressKeys = true;
}

由于缺少if块周围的大括号,因此只会有条件地执行if之后的第一条语句。你的缩进混淆了这个问题。你真的在这样做:

function play() {
    if (typeof gameInterval != "undefined") 
        clearInterval(gameInterval);
    gameInterval = setInterval(gameLoop, 100);
    allowPressKeys = true;
}
声明:

gameInterval = setInterval(gameLoop, 100);
总是被执行

你的意思可能是:

function play() {
    if (typeof gameInterval != "undefined") {
        clearInterval(gameInterval);
        gameInterval = setInterval(gameLoop, 100);
        allowPressKeys = true;
    }
}

由于缺少if块周围的大括号,因此只会有条件地执行if之后的第一条语句。你的缩进混淆了这个问题。你真的在这样做:

function play() {
    if (typeof gameInterval != "undefined") 
        clearInterval(gameInterval);
    gameInterval = setInterval(gameLoop, 100);
    allowPressKeys = true;
}
声明:

gameInterval = setInterval(gameLoop, 100);
总是被执行

你的意思可能是:

function play() {
    if (typeof gameInterval != "undefined") {
        clearInterval(gameInterval);
        gameInterval = setInterval(gameLoop, 100);
        allowPressKeys = true;
    }
}

如果不是全局的,则在外部范围的某个地方声明。如您所见,
gameInterval
未在
play
函数中声明,因此它不是
play
的本地属性。可能是一个隐式全局变量。如果
gameInterval
仅在函数范围内,它将在某个地方声明它。您没有在任何地方声明变量,因此它会在全局范围内自动定义。因为缺少大括号,只有条件后面的第一行是它的一部分,如果它存在,则清除间隔,因此定义
gameInterval
的下一行始终运行,在全局范围内声明变量,因此在下次函数运行时设置“变量gameInterval仅在此函数内定义”我没有看到它在任何地方被定义?如果不是全局的,但是在外部范围的某个地方被声明。如您所见,
gameInterval
未在
play
函数中声明,因此它不是
play
的本地属性。可能是一个隐式全局变量。如果
gameInterval
仅在函数范围内,它将在某个地方声明它。您没有在任何地方声明变量,因此它会在全局范围内自动定义。因为缺少大括号,只有条件后面的第一行是它的一部分,如果它存在,则清除间隔,因此定义
gameInterval
的下一行始终运行,在全局范围内声明变量,因此在下次函数运行时设置“变量gameInterval仅在此函数内定义”我没有看到它在任何地方定义?
typeof
总是返回字符串。字符串永远不等于未定义的
。typeof函数的结果永远不会给您一个等于“undefined”的字符串,这是错误的。试试未定义的
类型。有道理。谢谢你们两位!你能解释一下为什么使用
gameInterval!==未定义
而不是
游戏间隔类型!=“未定义”
?此外,OP表示他们的代码“有效”,并想知道原因。你为什么建议更改某些内容?事实并非如此,请尝试运行我的答案中的代码段
typeof
始终返回字符串。字符串永远不等于未定义的
。typeof函数的结果永远不会给您一个等于“undefined”的字符串,这是错误的。试试未定义的
类型。有道理。谢谢你们两位!你能解释一下为什么使用
gameInterval!==未定义
而不是
游戏间隔类型!=“未定义”
?此外,OP表示他们的代码“有效”,并想知道原因。你为什么建议更改某些内容?事实并非如此,请尝试运行我答案中的代码片段