为什么这个函数返回0

问题描述:

我想弄清楚为什么这个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

&&链将停止评估第一个非真(假)值并返回它。由于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 !!!谢谢。 –

发生这种情况是由于javascript在布尔表达式中处理数字的原因。 如果a和(& &)语句中的第一个参数返回0,则不会评估正确的参数,并返回0。