Array.every返回false而不是type error

时间:2015-04-03 14:31:13

标签: javascript arrays ecmascript-5

在练习各种JavaScript代码katas时,我遇到了这个问题:

使用以下签名编写函数isIntArray

function isIntArray(arr) {
    return true;
}
    如果数组中的每个元素都是整数,则
  • 返回true 如果数组为空,则
  • 返回true。
  • 为每个其他输入返回false。

我已经为此制定了自己的解决方案,但其中一个可接受的解决方案如下:

function isIntArray(arr) {
  return Array.isArray(arr) && arr.every(function (x) { return Math.floor(x)=== x });
}

现在我理解Math.floor部分在确定x是否为小数时是如何工作的,但我不明白的是它在遇到类似的东西时不会失败:

var arr = [1,2,"asd",NaN,5];

我试过阅读Math.floor和Array.prototype.every上的一些指南,我找不到任何解释这个的东西。当然,如果x是一个字符串,那么Math.floor(x)=== x应该返回一个TypeError?

1 个答案:

答案 0 :(得分:4)

  

如果x是字符串,那么Math.floor(x) === x应该返回TypeError吗?

不。如果其中一个操作数无法转换为数字然后再操作,则大多数数学函数和操作都返回NaN

因此,Math.floor("asd") === "asd"基本上是

NaN === "asd" // which is obviously false