循环的JavaScript与中的JavaScript不起作用

循环的JavaScript与中的JavaScript不起作用,javascript,for-loop,Javascript,For Loop,我编写了两个名为some和each的函数,希望得到如下所示的结果: console.log(every([NaN, NaN, NaN], isNaN)); // → true console.log(every([NaN, NaN, 4], isNaN)); // → false console.log(some([NaN, 3, 4], isNaN)); // → true console.log(some([2, 3, 4], isNaN)); // → false 我的职能是: f

我编写了两个名为some和each的函数,希望得到如下所示的结果:

console.log(every([NaN, NaN, NaN], isNaN));
// → true

console.log(every([NaN, NaN, 4], isNaN));
// → false

console.log(some([NaN, 3, 4], isNaN));
// → true

console.log(some([2, 3, 4], isNaN));
// → false
我的职能是:

function every(array,predicate){
  for (var element in array){
    if (!predicate(element))
      return false;
  }
  return true;
}

function some(array, predicate){
  for (var element in array){
    if (predicate(element))
      return true;
  }
  return false;
}
但是结果都是假的

一旦我将中的
for…更改为
for
循环,答案就正确了

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

function some(array, predicate) {
  for (var i = 0; i < array.length; i++) {
    if (predicate(array[i]))
      return true;
  }
  return false;
}
函数every(数组、谓词){
对于(var i=0;i

为什么
for..in
不能得到正确答案?

for..in
遍历正在迭代的对象的属性名称

在本例中,这些元素是
0
1
2
,因此您尝试调用这些元素上的谓词,而不是实际的数组元素


。迭代的顺序不能保证,它可以在非索引属性上迭代。

< P>如果您不想使用传统的< <代码> > <代码>循环,请考虑使用<代码> > <>代码>循环,重复数组中的元素。code>for…in
遍历键

function every (array, predicate) {
    for (var element of array) {
        if (!predicate(element)) {
            return false;
        }
    }
    return true;
}

注意:根据文档,这需要一个运行ES6 Harmony提案的实施。

可能的副本