逗号在JavaScript表达式中做了什么?

Top*_*era 81 javascript comma-operator

如果我使用:

1.09 * 1; // returns "1.09"
Run Code Online (Sandbox Code Playgroud)

但如果我使用:

1,09 * 1; // returns "9"
Run Code Online (Sandbox Code Playgroud)

我知道1,09不是一个数字.

逗号在最后一段代码中做了什么?

更多例子

if (0,9) alert("ok"); // alert
if (9,0) alert("ok"); // don't alert
Run Code Online (Sandbox Code Playgroud)
alert(1); alert(2); alert(3); // 3 alerts
alert(1), alert(2), alert(3); // 3 alerts too
Run Code Online (Sandbox Code Playgroud)
alert("2",
    foo = function (param) {
        alert(param)
    },
    foo('1')
)
foo('3'); // alerts 1, 2 and 3
Run Code Online (Sandbox Code Playgroud)

Yuv*_*dam 84

逗号运算符计算其两个操作数(从左到右)并返回第二个操作数的值.

资料来源: https ://developer.mozilla.org/en/JavaScript/Reference/Operators/Special_Operators/Comma_Operator

例如,表达式1,2,3,4,5求值为5.显然,逗号运算符仅对具有副作用的操作有用.

  • 他们从C中取出它.我认为它只对有副作用的表达有用. (2认同)
  • 我想不出很多情况下逗号运算符用于任何影响,但保存字符(缩小)或混淆代码. (2认同)
  • @user17753 它可以在`for` 循环的以分号分隔的部分中合法使用。 (2认同)

Dou*_*las 5

还需要考虑一些警报:

console.log((0, 9));
console.log((9, 0));
console.log(("foo", "bar"));
Run Code Online (Sandbox Code Playgroud)

另外,如果您想以交互方式尝试,请查看Firebug控制台.

  • 大声笑,很有趣:`警告("1",警报("2",警报("3"))) (7认同)
  • 在所有情况下只使用第一个参数.我想你会期望在你自己的代码中发生同样的事情(如果你有一个函数接受一个参数,但后来提供了两个).而@Topera,您的代码演示了当您将函数/方法作为参数传递时,即使它未被使用,它也会立即得到评估. (2认同)