Roy*_*mir 19 javascript jquery
直到最近的版本,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;
Run Code Online (Sandbox Code Playgroud)
题:
在之前的版本中,他们将它改为新版本还不够好?为什么他们检查阵列?
Den*_*ret 16
同样的价值obj回答你的问题:[3]
!isNaN( parseFloat(obj) ) && isFinite( obj )是true为了[3].
(obj - parseFloat(obj) + 1) >= 0是true为了[3].
这些问题背后的原因是转换为字符串或数字发生在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
Run Code Online (Sandbox Code Playgroud)