本质上,我试图在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)
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语句与语言的正常语法的完全不同.
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.你会很快学到很多东西.这会伤害你的感情.
JavaScript没有块范围.所以所有var声明都在函数范围内.因此,while在JavaScript中声明表达式中的变量是没有意义的.
另外,您应该用分号结束语句.这不是绝对必要的,但强烈建议.