javascript中while变量的声明

Ren*_*ger 27 javascript

本质上,我试图在javascript中的while循环的条件部分声明一个变量:

while (var b=a.pop()) {
  do_sth(b)
}
Run Code Online (Sandbox Code Playgroud)

然而,我的浏览器(firefox)不接受这一点.相反,我必须这样:

var b
while (b=a.pop()) {
  do_sth(b)
}
Run Code Online (Sandbox Code Playgroud)

哪个有效.这种行为有望吗?

SLa*_*aks 31

是的.

如果你愿意,你可以使用一个for循环,如下所示:

for (var b; b = a.pop(); ) {      //Note the final semicolon
    do_sth(b);
}
Run Code Online (Sandbox Code Playgroud)

  • `for` 是语法糖 (2认同)
  • @PauliSudarshanTerho在哪个星球上,最普遍使用的语言构造之一就是“语法糖”? (2认同)

Ben*_*her 27

这个问题有点陈旧,但我认为答案都错过了一个重要的区别.也就是说,while循环需要一个表达式,它可以转换为条件,即布尔值或可以转换为布尔值的值.有关详细信息,请参阅Mozilla文档.

纯赋值(没有实例化)通过其默认返回值(右侧的值)强制转换为布尔值.

A var(或letor const)是一个允许可选赋值但返回值为的语句undefined.

您可以在控制台中轻松测试:

var foo = 42; // undefined
bar = 42      // 42
Run Code Online (Sandbox Code Playgroud)

返回值本身并没有回答这个问题,因为它undefined是假的,但确实表明即使JS让你放入var一个条件,它也只会总是评估为false.

其他人提到了for语句,它们允许变量的声明和实例化.这是事实,但文档解释for需要声明或声明.

意见可能会有所不同,但对我来说,所有这些都增加了可理解的一致性,而不是循环方面的行为怪癖.一while环是作为一个循环版本更高尚的思想if比类似的声明for循环.如果所有这些都有奇怪之处,那就是for语句与语言的正常语法的完全不同.

  • 我在寻找'为什么?' javascript不允许const,let,var内部条件,这回答了我的问题.我总是发现,当我创建一个新变量而不是变量的值时,控制台报告未定义令人困惑.我仍然没有看到javascript返回undefined的意义; 它们也可以返回变量的值,但是如果它返回undefined,则更好的浏览器和编译器在条件语句中使用时会出错. (3认同)

Nos*_*dna 17

JavaScript没有块范围.它有功能范围.因此,为了确保人类和JavaScript都以相同的方式读取代码,您应该手动将var声明提升到函数顶部.

以下是JSLint对您的代码的说法:

Problem at line 1 character 8: Expected an identifier and instead saw 'var'.
Run Code Online (Sandbox Code Playgroud)

至少在学习JavaScript的时候使用JSLint.你会很快学到很多东西.这会伤害你的感情.

  • let不再是这种情况 (5认同)

Dan*_*den 6

JavaScript没有块范围.所以所有var声明都在函数范围内.因此,while在JavaScript中声明表达式中的变量是没有意义的.

另外,您应该用分号结束语句.这不是绝对必要的,但强烈建议.

  • “JavaScript 没有块作用域” 2009 年对于 JS 开发者来说是一段黑暗时期。现在 JS 有了块的词法环境 (2认同)