【问题标题】:Simple Q Javascript - Why does this return false?Simple Q Javascript - 为什么返回错误?
【发布时间】:2016-10-21 01:30:00
【问题描述】:

为什么返回 false?我认为for循环应该遇到前3个,满足if条件然后返回true。感谢您的帮助。

  var array = [3, 3, 0, 0, 0, 3, 3];

  function some(array) {
    for (var i = 0; i < array.length; i++) {
      if (array[i] == true) {
        return true;
      }
    }
    return false;
  };

  console.log(some(array));
  // false

【问题讨论】:

  • 因为你的数组项都没有 == true ...当将数字与 true 进行比较时,只有 == 如果数字为 1 - 我认为 true 被“强制”为 1 以进行比较
  • 好吧,没有什么是真的。 3 == 真; // 假 0 == 真; // 假等。
  • 看到这个,如果你console.log(5 + true);你得到6
  • @JaromandaX:是的,完全正确。实际上,每当您与布尔值进行比较时,布尔值都会转换为数字。所以[1,2,3] == true实际上是在做[1,2,3] == 1
  • 又一个检查if ((b == true) != false)的理由。

标签: javascript arrays


【解决方案1】:

它返回 false,因为您正在与 true 进行比较,并且您的数组中的值都不是 true 或 1(javascript 认为是 true)。如果您修改检查以仅检查值的真实性,那么您将获得您期望的值。

var array = [3, 3, 0, 0, 0, 3, 3];

  function some(array) {
    for (var i = 0; i < array.length; i++) {
      if (array[i]) { //Notice we just check for a truthy value
        return true;
      }
    }
    return false;
  };

  console.log(some(array));

【讨论】:

  • 注意,如果值是 1,那么在原始代码中的计算结果为 true
  • "您的数组中没有一个值是 true 或 1" 任何转换为​​ 1 的值都可以,例如'1', [1], {toString() { return '1';}}.
  • 感谢您的澄清,我总是忘记javascript对toString的使用。
【解决方案2】:

条件 (array[i] == true) 将检查 array[i] 的值是否为“true”(布尔值)。

从您的数组变量中,没有数组 [i] 的值为“true”(布尔值),那么条件 (array[i] == true) 始终为 false。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多