逗号运算符返回第二个操作数的值?

时间:2009-11-06 18:25:08

标签: javascript

链接

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/Comma_Operator

  

逗号运算符评估两者   它的操作数(从左到右)和   返回第二个值   操作数。

以及作为一个例子

for (var i=0, j=9; i <= 9; i++, j--)
  document.writeln("a["+i+"]["+j+"]= " + a[i][j]);

无法准确理解这一点。 “返回第二个操作数的值” - 这意味着什么?

感谢您提前提供任何帮助。

4 个答案:

答案 0 :(得分:1)

就像描述一样简单:

console.log((1,2) == 2); // true

表达式(1,2)将返回第二个操作数(2)的值。

编辑:您发布的示例并不能很好地举例说明逗号运算符的“返回值”,因为for循环上的增量表达式的值不是用过的。该表达式已经过评估,但没有对其返回值进行任何操作。

for ([initialExpression]; [condition]; [incrementExpression])
   statement

答案 1 :(得分:1)

请参阅for循环索引调整

7:~$ js
js> 1,2
2
js> 1,2,3
3
js> 1,2,3,4
4
js> 

这个想法是第一个表达式将纯粹用于分配副作用。整个表达式的值是,运算符的右操作数的值。

通常情况下,这两个表达式的值都没有被评估。在您的示例中,,运算符的使用是将两个索引调整塞入for循环的第三个表达式中。没有使用任何值,它纯粹是为了副作用。这是一个更为复杂的例子:

js> i = 10; j = 20;
20
js> t = i++, j--;
20
js> i
11
js> j
19
js> t
10

您可以看到两个表达式都已经过评估(因此ij被撞了)但t的值是第二个表达式j--的值。

答案 2 :(得分:0)

var m = (false, "string");
m === false; // is false
m === "string"' // is true

它实际上适用于任意数量的操作数:

var n = (1,2,3,4,5,6);
n === 6; // is true

答案 3 :(得分:0)

我认为使用函数演示更清楚:

console.clear();
function a() {
   console.log('function a executed, its return value is \'ignored\'');
   return 1;
}
function b() {
   console.log('function b executed and expression (a(),b()) will evaluate to the return value from b');
   return 2;
}
console.log((a(),b())==2);

输出:

function a executed, its return value is 'ignored'
function b executed and expression (a(),b()) will evaluate to the return value from b
true