【问题标题】:Why does this function return 0 [duplicate]为什么这个函数返回0 [重复]
【发布时间】:2017-08-25 16:35:12
【问题描述】:

我试图弄清楚为什么当 this.position.startOffset 的值是 0 而不是 0 以外的数字时,这个 javascript 函数返回 0

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

【问题讨论】:

  • 看起来它正在评估布尔值、真或假、1 或 0...这是意图吗?
  • 在 JavaScript 中,逻辑“与”运算符 (&&) 返回第一个假值。 0 是假的,所以它会返回它。
  • 你期望它返回什么?

标签: javascript logic ready


【解决方案1】:

&& 链将停止评估第一个非真实(虚假)值并返回它。因为0 是假的,所以在遇到它时会返回它。如果没有遇到假值,则返回最后一个值:

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);

假值是:

  1. null
  2. undefined
  3. 空字符串''""
  4. 号码0
  5. 布尔值false
  6. NaN

【讨论】:

  • 不错的答案! JavaScript 真的很奇怪.. 总是想使用 typescript 或其他不依赖于非布尔值的布尔运算的构造。
  • NaN 也是假的。
  • @FelixKling facepalm!!!谢谢。
【解决方案2】:

这是由于 javascript 如何处理布尔表达式中的数字。 如果 and (&&) 语句中的第一个参数返回 0,则不会计算正确的参数并返回 0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-17
    • 2023-01-01
    • 2019-06-26
    • 2021-12-30
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 2017-02-11
    相关资源
    最近更新 更多