【发布时间】:2015-04-03 14:31:12
【问题描述】:
在练习各种 JavaScript 代码 katas 时,我遇到了这个问题:
用下面的签名写一个函数 isIntArray
function isIntArray(arr) {
return 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 吗?
【问题讨论】:
-
你是不是刚刚尝试
Math.floor("asd")并看到你得到NaN作为返回值,而NaN === "asd"仍然是假的。 -
JavaScript
===运算符永远不会给您任何类型的“类型错误”。 -
我试过 Math.floor("asd") 并得到 undefined is not a function in the console
-
好的,很好,但这不是
===运算符抛出错误的示例。 (另外,Math.floor("asd")在我的浏览器中运行良好。) -
该错误是您将“floor”拼写为“Floor”的结果。
标签: javascript arrays ecmascript-5