【问题标题】:What is the purpose for multiple comma-separated expressions in a WHILE condition?WHILE 条件中多个逗号分隔的表达式的目的是什么?
【发布时间】:2014-02-12 16:04:26
【问题描述】:

我偶然发现了以下 JavaScript:

代码:

var x="", i=0;
while (i<4, i<7, i<5, i<6)
{
  x=x + "The number is " + i + "<br>";
  i++;
}
document.write(x);

我从来不知道可以在一个WHILE 语句中使用多个逗号分隔的表达式。

结果:

The number is 0
The number is 1
The number is 2
The number is 3
The number is 4
The number is 5

这是什么原因以及行为是什么(只有最后一个表达式被评估为 while-exit)?

所有Javascript/C/Java 语言的行为是否标准化?

【问题讨论】:

  • 以这种方式编写代码没有充分的理由。
  • 这里只使用最后一个(ijavascriptweblog.wordpress.com/2011/04/04/…
  • 好的...如果您知道它被称为“逗号运算符”,这似乎是一个愚蠢的问题:-) 谢谢大家:-)
  • 这看起来不像一个愚蠢的问题,只是一个你应该避免的愚蠢代码。我希望这不是一种教程。

标签: javascript syntax coding-style


【解决方案1】:

Only the last result is kept in result of the comma operator,所以

while (i<4, i<7, i<5, i<6)

真的等价于

while (i<6)

这就是为什么你不经常看到这种情况的原因:如果你的比较没有副作用,那就没用了。

【讨论】:

  • 当表达式实际上是赋值而不是比较时,当然有时会使用逗号运算符,因此确实有副作用。
  • @Alnitak 我更多地指的是具有副作用的比较,而不仅仅是明显的分配,例如while (i&lt;nextNum(), i&lt;nextNum()),但在一段时间内使用它很难获得好的代码......
  • 该评论并非真正针对您,而是针对您的读者 ;-)
【解决方案2】:

这是 JavaScript 中一个特殊的运算符,称为逗号运算符; 所以当 JavaScript 遇到这一行时

(i<4, i<7, i<5, i<6)

它将逐一计算括号中的所有操作数,并返回最后一项的计算结果,即i &lt; 6

很少使用;我记得曾经使用过它的一个场合是间接调用eval

(0, eval)(src)

但在你的例子中再次使用它是多余的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 2014-02-22
    • 2023-01-12
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多