2017-02-02 116 views
2

我來到這個代碼,但我不很瞭解它做什麼..什麼是返回void 0 === i &&(i = 3),0 ===我? (..A ..):(..B ..)呢?

test.update = function(i) 
{ 
return void 0 === i && (i = 3), 0 === i ? (..A..) : (..B..) 
} 

(..A ..)和(..B ..)的代碼,我的避風港只是其他線路張貼。

比方說,如果i將有一個0值,該函數將返回什麼?

什麼是「void 0 ===我& &(i = 3)」?特別是(i = 3)。這是否意味着if (void 0 === i)爲真並且i可以得到3,i會是3?那麼逗號呢?我已經檢查了這個question,但我仍然不明白。

對不起,有很多問題,但我想有一個完整的答案,所以我可以完全理解發生了什麼。

謝謝

+1

我猜它只是執行'(..B ..)''什麼價值i'傳遞語句塊。 – pttsky

+0

'void 0 ===我似乎檢查'i'是否是'undefined'。 'i'沒有定義時,'i = 3'將'i'設置爲數字3。 – evolutionxbox

+0

'0 === i''檢查'i'是否爲'0',然後執行'(..A ..)'或'(..B ..)'。該返回使用[逗號](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator)和[三元操作](https://developer.mozilla.org/ EN /文檔/網絡/的JavaScript /參考/運營/ Conditional_Operator)。 – evolutionxbox

回答

5

好吧,首先讓我們來根據operator precedence設置括號:

return (((void 0) === i) && (i = 3)), ((0 === i) ? A : B) 

我們單操作

void 0 

簡單地返回undefined。我們也可以這樣寫:

undefined === i 

明顯檢查是否未定義i

i = 3 

看起來像比較第一,但實際上它是返回3分配。到目前爲止,該行查找i是否未定義,如果是,則分配值3

現在下面的逗號是一個運算符。它從左到右評估所有表達式並返回最後一個(最右邊)。在這種情況下,最後一個表達式是0i的比較。意思是如果i0此時,整個表達式的返回值是true

最後有一個條件運算符,這是一個簡短的方法來編寫if .. else ..

到目前爲止行可能已經又寫爲:

if (i === undefined) { 
    i = 3; 
} 
if (i === 0) { 
    // return (A) 
} 
else { 
    // return (B) 
} 
1

休息是很重要的,因爲void operator計算表達式並返回undefined

例如,如果表達式是一個函數調用,像

return void func(); 

然後函數被調用和返回voidundefined,即使func將返回不同的東西。

2

只要運行它,看到的第一件事就是返回undefined無論什麼其它地方就

如果我=== 0,運行A,否則經營的,如果我==「」,I = 3 - >經營的

var test= {} 
 
test.update = function(i) { 
 
    return void 0 === i && (i = 3), 0 === i ? (console.log(i,"a")) : (console.log(i,"b")) 
 
} 
 

 
console.log("i is null, res:"+test.update(null)); 
 
console.log("no i, res:"+test.update()); 
 
console.log("i blank, res:"+test.update("")); 
 
console.log("i=0,res:"+test.update(0)); 
 
console.log("i=1,res:"+test.update(1)); 
 
console.log("i=2,res:"+test.update(2)); 
 
console.log("i=3,res:"+test.update(3));

1

我猜它只是執行不管我值傳遞報表(..B ..)塊。

  • void運算符計算其操作數,然後返回undefined 不依賴評價的結果的;
  • comma運營商只計算一個東西,然後又從左到右(如在var i = 0, j = 0;
  • 0 === i && (i = 3)i3如果i等於0
  • 0 === i ? (..A..) : (..B..)執行語句AB塊,但正如上面所說的,此時保證i不等於0
相關問題