简单问题JavaScript - 为什么这个返回 false?

3
为什么这个代码返回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


4
因为你的数组项中没有一个等于true...当将数字与true进行比较时,只有当数字为1时才相等——我认为true在比较时被“强制转换”为1。 - Jaromanda X
嗯,没有什么可以等同于true。3 == true; // false 0 == true; // false 等等。 - bullzito
要看到这个实际效果,如果你 console.log(5 + true); 你会得到6。 - Jaromanda X
@JaromandaX:没错,完全正确。实际上,每当你与布尔值进行比较时,布尔值都会转换为数字。因此,[1,2,3] == true 实际上是在执行 [1,2,3] == 1 - Felix Kling
再次检查 if ((b == true) != false) 的原因。 - 15ee8f99-57ff-4f92-890c-b56153
2个回答

5

它返回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。 - Jaromanda X
你的数组中没有任何一个值为 true 或 1。任何可以转换为 1 的值都可以使用,例如:'1'[1]{toString() { return '1';}} - Felix Kling
谢谢澄清,我总是忘记了JavaScript使用toString的方法。 - rdubya

0

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

从您的数组变量中可以看出,没有任何一个数组元素array[i]的值为“true”(布尔值),因此条件(array[i] == true)始终为false。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接