ClojureScript中int?、integer?与number?的区别是什么?
ClojureScript 中 int?、integer? 与 number? 的区别
三个函数均用于数值类型判断,但校验范围和严格程度差异明显,具体区别如下:
1. number?
最宽松的判断逻辑,只要是 JavaScript 的 Number 类型实例就返回 true,覆盖所有数值形式:
- 整数:
(number? 1) ;=> true - 浮点数:
(number? 1.5) ;=> true - 特殊数值:
(number? js/NaN) ;=> true、(number? js/Infinity) ;=> true
2. integer?
校验数值是否为整数型数值,不限制位数,但会排除非整数值的 Number 类型:
- 任意位数的整数:
(integer? 1) ;=> true、(integer? 2147483648) ;=> true - 整数值的浮点数:
(integer? 1.0) ;=> true(数值本质为整数) - 非整数值:
(integer? 1.5) ;=> false、(integer? js/NaN) ;=> false、(integer? js/Infinity) ;=> false
3. int?
最严格的判断逻辑,仅当数值是32位有符号整数时返回true,范围为 -2^31(-2147483648)到 2^31-1(2147483647)之间的整数:
- 32位范围内的整数:
(int? 1) ;=> true、(int? -2147483648) ;=> true - 超出32位范围的整数:
(int? 2147483648) ;=> false - 范围内的整数值浮点数:
(int? 1.0) ;=> true - 非整数值或特殊数值:
(int? 1.5) ;=> false、(int? js/NaN) ;=> false
核心对比总结
number?:判断是否为 Number 类型,不区分具体数值形式integer?:判断数值是否为整数(不限位数),排除非整数值int?:判断数值是否为32位有符号整数,是integer?的子集
内容的提问来源于stack exchange,提问作者hata
相关产品推荐
相关产品推荐

