2017-08-25 247 views
1

我想弄清楚爲什麼這個javascript函數返回0this.position.startOffset值是0但不是當值是0以外的數字。爲什麼這個函數返回0

ready: function() { 
    return (this.position.startOffset 
      && this.position.endOffset 
      && this.position.representation.trim().length >= 0 
      && this.text.id 
      && this.user.id 
      && this.concept); 
} 
+0

看起來像它的評估布爾值,真或假,1或0 ...是,用意何在? – kvr

+0

在JavaScript中,邏輯「和」運算符('&&')返回第一個虛假值。 0是虛假的,所以它會返回它。 – Ivar

+1

你期望它返回什麼? – epascarello

回答

1

&&鏈將停止評估第一個非真(假)值並返回它。由於0是虛假的,因此在遇到時會返回。如果沒有遇到falsy值,則返回最後一個值:

var a = 55 && [] && 0 && false && true;  // yeild 0 as it is the first falsy value to encounter 
 

 
console.log("a:", a); 
 

 
var b = 30 && true && [] && "haha";   // yeild "haha" as it is the last value (no falsy value encountered) 
 

 
console.log("b:", b);

Falsy值:

  1. null
  2. undefined
  3. 空字符串''""
  4. 人數0
  5. 布爾false
  6. NaN
+1

好的答案! JavaScript真的很奇怪..總是希望使用打字稿或其他不依賴非布爾運算的布爾操作的構造。 – KillPinguin

+1

'NaN'也是麻煩的。 –

+0

@FelixKling facepalm !!!謝謝。 –

0

發生這種情況是由於javascript在布爾表達式中處理數字的原因。 如果a和(& &)語句中的第一個參數返回0,則不會評估正確的參數,並返回0。