【发布时间】:2017-06-29 00:44:41
【问题描述】:
我正在尝试检查 javascript 中数组的所有元素类型。我实际上正在编写一个只接受带有数字的数组的函数。
所以
[1,2,-3,-4,0] //valid input
[1,2,-3b,-4a,0] //Invalid input
我正在尝试通过使用javascript的every()函数来实现以下功能,
try {
if (!inputArr.every(x => typeof x === 'number')) {
throw 'input array should only have numbers';
}
}
catch (err) {
return err;
}
但出现错误。当我进一步调查它而不是意识到这一点时,
typeof 1 // number
typeof 1a // error
所以我们无法检查字母数字值的类型。有人可以在这里提出一些选择吗?我使用的是纯 JavaScript ES5 或 ES6。
【问题讨论】:
-
你也可以使用isNaN()
-
@Manatax 但是
isNaN("123")会返回false,即使"123"不是数字。如果这适合 OP 的需求,那么它会起作用。如果目标是更严格的检查,那么typeof似乎是要走的路。 -
@Manatax,我需要严格检查提供的输入数组是否只有所有数字。正如@Michael Geary 所说,isNan 在这里不起作用
-
既然
[1,2,-3b,-4a,0]是无效的语法,你的程序甚至无法运行,我们是否应该假设输入是一种表示为字符串的数组,如"[1,2,-3b,-4a,0]"? -
@Akash 等等,你是说你的函数的输入是一个string,而不是一个array,而且这个字符串可能类似于@ 987654331@?那是一个完全不同的问题。我会首先使用
JSON.parse()尝试将此字符串转换为JavaScript 数组。如果它抛出异常,那么你有类似“-3a”的东西,应该拒绝。否则,在结果数组上运行测试循环。
标签: javascript typeof