jQuery改变了isNumeric(最新版本)?
直到最近的版本,jQuery用于检查数字是否通过:
return !isNaN( parseFloat(obj) ) && isFinite( obj );
第一部分是:
-
parseFloat("d") //Nan
-
!isNaN( parseFloat(Infinity)) //true but not a number
第二部分是:
-
isFinite('2') //true
但在最近的版本中,他们更改了它并将其更改为:
return !jQuery.isArray(obj) && (obj - parseFloat(obj) + 1) >= 0;
题:
在之前的版本中,他们将其更改为新版本还不够好 ? 为什么他们检查arrays?
obj
的相同值回答了你的问题: [3]
!isNaN( parseFloat(obj) ) && isFinite( obj )
对于[3]
为true
。
(obj - parseFloat(obj) + 1) >= 0
对于[3]
为true
。
这些问题背后的原因是在parseFloat
和isFinite
转换为字符串或数字,并且转换为数组的字符串是使用逗号将其元素转换为字符串的结果。
所以这个改变是一个bug修复。
请注意,您仍然可以使用{toString:function(){ return 3}}
等值使其“失败”,但是在这种情况下还不清楚jQuery应该返回什么(此对象确实希望显示为数字,毕竟) 。
例如,以前的版本不适用于具有单个数字元素的数组:
var obj = [1]; (!isNaN( parseFloat(obj) ) && isFinite(obj)); //true var obj = [1, 2]; (!isNaN( parseFloat(obj) ) && isFinite(obj)); //false