在练习各种 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 thenMath.floor(x) === x
should return aTypeError
?
不。如果其中一个操作数无法转换为数字并进行运算,大多数数学函数和运算都会返回 NaN
。
所以,它变成了 Math.floor("asd") === "asd"
本质上是
NaN === "asd" // which is obviously false
关于javascript - Array.every 返回 false 而不是类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29434133/