如何检查变量当前是否为整数类型?我一直在寻找某种资源,并且我认为===运算符很重要,但是我不确定如何检查变量是否为Integer(或与此相关的Array)
Answers:
在JavaScript中,变量永远不会是整数类型-不能区分不同类型的Number。
您可以测试变量是否包含数字,以及该数字是否为整数。
(typeof foo === "number") && Math.floor(foo) === foo
如果变量可能是包含整数的字符串,并且您想查看情况是否如此:
foo == parseInt(foo, 10)
我知道您对整数感兴趣,所以我不会回答,但是如果您想检查浮点数,可以这样做。
function isFloat( x )
{
return ( typeof x === "number" && Math.abs( x % 1 ) > 0);
}
注意:这可以将以.0(或逻辑上等价0的)结尾的数字作为整数。在这种情况下,实际上需要发生浮点精度错误才能检测浮点值。
例如
alert(isFloat(5.2)); //returns true
alert(isFloat(5)); //returns false
alert(isFloat(5.0)); //return could be either true or false
诸如YourJS之类的一些实用程序库提供了一些函数来确定某物是数组还是某物是整数还是许多其他类型。YourJS通过检查值是否为数字然后被1整除来定义isInt:
function isInt(x) {
return typeOf(x, 'Number') && x % 1 == 0;
}
上面的代码段是从YourJS代码段中提取的,因此仅适用typeOf于该库,因为它是由库定义的。你可以下载YourJS的简约版本,主要只有类型检查的功能,例如typeOf(),isInt()和isArray(): http://yourjs.com/snippets/build/34,2
您可以考虑使用非常小的无依赖库,例如Not。解决所有问题:
// at the basic level it supports primitives
let number = 10
let array = []
not('number', 10) // returns false
not('number', []) // throws error
// so you need to define your own:
let not = Object.create(Not)
not.defineType({
primitive: 'number',
type: 'integer',
pass: function(candidate) {
// pre-ECMA6
return candidate.toFixed(0) === candidate.toString()
// ECMA6
return Number.isInteger(candidate)
}
})
not.not('integer', 4.4) // gives error message
not.is('integer', 4.4) // returns false
not.is('integer', 8) // returns true
如果养成习惯,您的代码将更强大。Typescript解决了部分问题,但在运行时不起作用,这也很重要。
function test (string, boolean) {
// any of these below will throw errors to protect you
not('string', string)
not('boolean', boolean)
// continue with your code.
}