编程语言
首页 > 编程语言> > javascript-Underscore.js在isFinite函数之后调用isNaN

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