javascript - Array.every 返回 false 而不是类型错误

标签 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 吗?

最佳答案

Surely if x was a string then Math.floor(x) === x should return a TypeError?

不。如果其中一个操作数无法转换为数字并进行运算,大多数数学函数和运算都会返回 NaN

所以,它变成了 Math.floor("asd") === "asd" 本质上是

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

关于javascript - Array.every 返回 false 而不是类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29434133/

相关文章:

javascript - 如何在没有模块支持的情况下使用 ember.js

node.js - 如何从 Node 10.4.1 中的 RxJS 6.2.1 导入 fromPromise

javascript - 使用正则表达式和express-jsonschema来验证数组的内容

JavaScript 使浏览器崩溃

javascript - 如何通过 Google 策略处理来自 dpd-passport 的回调/重定向?

javascript - 在将项目从一个数组添加到另一个数组之前比较两个数组

java - 使用数组数组中的字典顺序比较两个数组(java)

javascript - Typescript 组件中的“this”与 Angular2 中的 ES5

javascript - jquery .append 出现问题

python 聚合(groupby)2d 矩阵