在练习各种JavaScript代码katas时,我遇到了这个问题:
使用以下签名编写函数isIntArray
function isIntArray(arr) {
return true;
}
我已经为此制定了自己的解决方案,但其中一个可接受的解决方案如下:
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?
答案 0 :(得分:4)
如果
x
是字符串,那么Math.floor(x) === x
应该返回TypeError
吗?
不。如果其中一个操作数无法转换为数字然后再操作,则大多数数学函数和操作都返回NaN
。
因此,Math.floor("asd") === "asd"
基本上是
NaN === "asd" // which is obviously false