1. 程式人生 > >js中的逗號運算符

js中的逗號運算符

class 逗號 var 直接 滿足 所有 表示 跳出循環 運算

逗號運算符

逗號運算符是二元運算符,它的操作數可以是任意類型。它首先計算左操作數,然後計算右操作數,最後返回右操作數的值,用逗號運算符可以在一條語句中執行多個運算

作用:

1.在一條語句中從左到右執行多個運算

2.返回右邊最後一個值作為表達式的結果(經常被忽略但是卻很重要的特性)

(i = 0), (j = 1), (k = 2);
//計算結果是2,它和下面的代碼基本等價
i = 0;
j = 1;
k = 2;
console.log(((i = 1), (j = 2), (k = 3))); //計算結果為2

應用場景:

1.同時聲明多個變量

var iNum1 = 1,
    iNum = 2,
    iNum3 = 3;

2.for 循環中三部分有多個變量時,使用,分割

var k;
for (var i = 0, j = 0; i < 6, j < 10; i++, j++) {
    k = i + j;
}
console.log(k);

來一道醍醐灌頂的面試題:

var k;
for (var i = 0, j = 0; i < 6, j < 10; i++, j++) {
    k = i + j;
}
console.log(k); //k=?

結果推測:

  1. k=10
    解析:
    因為 i=6 時,不滿足條件,跳出循環。(關系間為&&關系)
  2. k=12
    基礎原因考慮到 1,然後推測 k=i+j 是引用函數中的 i、j 所以當 log(k)的時候,應該輸出 i、j 循壞結束後的值即 i=j=6(閉包後遺癥)
  3. k=18
    因為 i < 6, j < 10 是或的關系,需要兩者同時值為 false
  4. k=18
    逗號運算符從左到右依次計算每個操作符,最終結果由最右的操作數決定,j<10 才為中止條件。

輸出答案:

console.log(k); //k=18

3、4 推測驗證:

var k;
for (var i = 0, j = 0; i < 6, j < 10, 2 < 1; i++, j++) {
    k = i + j;
}
console.log(k);

驗證分析:

1.逗號分隔的是或的關系,那麽需要所有表達式都為false,結果依然為18

2.逗號分隔為運算符,那麽條件判斷最終結果為最右表達式2<1,那麽將不進入循環,直接輸出undefiend

驗證結果:

console.log(k);//k=undefined

結果分析,最終輸出k=undefined,for中的判斷表示式使用逗號分隔時,遵循逗號運算符的基本規則,最終結果由最右的操作數決定

js中的逗號運算符