javascript-Underscore.js在isFinite函数之后调用isNaN
作者:互联网
在Underscore.js库中,如果值是数字,则有一个名为isFinite的函数返回“ true”.考虑到如果作为参数传递的值是数字,则Javascript的内置函数isFinite已经返回“ true”,为什么还要调用!isNaN(parseFloat(obj))?
// Is a given object a finite number?
_.isFinite = function(obj) {
return isFinite(obj) && !isNaN(parseFloat(obj));
};
解决方法:
这涵盖了isFinite(“”),isFinite(null)和isFinite(false)都返回true的情况,因为isFinite盲目地将其参数转换为数字并将其中任何一个视为0.
从数字转换开始…
Number("") // 0
Number(false) // 0
Number(null) // 0
Number(undefined) // NaN
… isFinite具有一些令人惊讶的结果:
isFinite("") // true
isFinite(false) // true
isFinite(null) // true
isFinite(undefined) // false
同时,_.isFinite返回的结果与您预期的一样,因为parseFloat对于所有这些值均返回NaN
_.isFinite("") // false
_.isFinite(false) // false
_.isFinite(null) // false
_.isFinite(undefined) // false
请注意,您可以使用Number.isFinite进行相同的显式检查,该检查不会尝试转换其参数(但在浏览器中不太受支持):
Number.isFinite("") // false
Number.isFinite(false) // false
Number.isFinite(null) // false
Number.isFinite(undefined) // false
标签:underscore-js,javascript 来源: https://codeday.me/bug/20191028/1956228.html