我有一个行为奇怪的脚本。
console.log (typeof button);
console.log ('IsNAN ' + isNaN(button));
console.log ('isNumeric ' + jQuery.isNumeric(button));
console.log ();
当button是一个对象时,isNaN应该返回true;因为对象是NaN。然而,控制台显示不同:
object
IsNAN false // should be true!
isNumeric false
为什么?
编辑:有问题的脚本是http://flesler-plugins.googlecode.com/files/jquery.serialScroll-1.2.2.js
第126行@函数跳转(e,按钮)。
答案 0 :(得分:3)
IsNAN是假的//应该是真的!
不一定。 :-) isNaN
只有在它的参数(如有必要时转换为Number
)为NaN
时才为真。
根据对象的内容,转换为NaN
时,它可能是Number
,也可能不是null
。它取决于将对象转换为其原始值时发生的情况。例如,0
会转换为toString
。在许多其他情况下转换为原语涉及将其转换为字符串(例如,数组),并且某些对象的默认NaN
可能返回可以转换为非Number
{的内容。 {1}}。
非NaN
个对象的示例:
// null
console.log(Number(null)); // 0
// an array (which becomes "23" when converted to primitive, because
// arrays do `join` for `toString`; then the "23" becomes 23)
console.log(Number([23])); // 23
// another object implementing toString or valueOf in a way that returns
// something convertable to a non-NaN number
console.log(Number(new Foo("47"))); // 47
...其中Foo
是:
function Foo(value) {
this.value = value;
}
Foo.prototype.toString = function() {
return this.value;
};
(在上文中,toString
也可以是valueOf
。)
答案 1 :(得分:2)
使用null对象调用的isNaN()应该是false。
如果您的对象不为null且无法转换为数字,则它将返回true。
答案 2 :(得分:0)
我认为你的变量按钮等于null。
typeof(null)==' object'
isNaN(null)== false