当我使用===而不是!==时,为什么更改“ if”条件会给出不同的答案?

时间:2018-08-28 15:35:22

标签: javascript arrays if-statement

该函数检查数组元素是否相同,如果相同,则应返回true。

当我使用下面的函数时,它会给出正确的结果。

var arr = [1, 2, 3, 4];

function isUniform(arr) {
  var store = arr[0];

  for (var i = 0; i < arr.length; i++) {
    if (arr[i] !== store) {
      return false;
    }
  }
  return true;
}
console.log(isUniform(arr));

但是当我使用这样的功能时更改 if 条件,它返回false

var arr = [1, 2, 3, 4];

function isUniform(arr) {
  var store = arr[0];

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

}

console.log(isUniform(arr));

5 个答案:

答案 0 :(得分:2)

问题在于,如果下一个值与true相同,您的代码段将返回arr[0],请参见以下示例:

var arr = [1, 1, 3, 1, 1];

function isUniform(arr) {
  var store = arr[0];

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

}

console.log(isUniform(arr));

由于arr[0] store

,因此for循环开始时函数将立即返回true。

您应该使用Array#every()来检查所有元素是否都符合特定条件:

var arr = [1, 1, 3, 1, 1];
var arr2 = [1,1,1,1,1,1,1];

function isUniform(arr) {
  return arr.every(e => e === arr[0]);
}

console.log(isUniform(arr));

console.log(isUniform(arr2));

答案 1 :(得分:1)

firts循环给出了严格的答案,因为列表中的元素不相同,第二个循环的问题是它检查了列表中的每个元素,并且当我发现一个元素等于{{1}时}(在这种情况下为(array[0]),它将返回true,而不能为true。

第二个循环应该是:

1

答案 2 :(得分:0)

因为如果第一个元素相同,它将返回true。它不会检查所有元素,而如果所有元素都相同,则第二个元素将返回true;如果其中一个元素不同,则它将返回false。

最简单的方法是:

 (new Set(array)).size === 1

答案 3 :(得分:0)

第二个代码片段不会检查所有元素是否等于store,如果至少一个元素等于true,则返回store

如果所有元素都不等于false,则第一个返回store,如果所有元素都不等于true,则第一个返回store,但要保证,它不能测试所有元素是否都等于store,在这种情况下,这只是合乎逻辑的结论。

答案 4 :(得分:-1)

它返回true ...您也可以考虑做...

arr.includes(arr[0]) // returns true