JavaScript中的isNaN()函数
本文介绍了JavaScript中的isNaN()函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
isNaN()确实适用于对象。在基于对象调用isNaN()函数时,会首先调用对象的valueOf()方法,然后确定该方法返回的值是否可以转换为数值。如果不能,则基于这个返回值再调用toString()方法,再测试返回值。
这段内容不明白,请各位老师给解释一下,多谢!
解决方案
请看下面的例子。
isNaN(obj)
// 等同于
if (typeof obj.valueOf() === 'object') {
isNaN(obj.toString());
} else {
isNaN(obj.valueOf());
}
上面代码中,isNaN函数将obj对象转为数值。首先,调用obj.valueOf方法, 结果返回对象本身;于是,继续调用obj.toString方法,这时返回字符串"[object Object]"
,对这个字符串使用isNaN函数,得到true。因为字符串不是数字。
默认情况下,对象的valueOf方法返回对象本身,所以一般总是会调用toString方法,而toString方法返回对象的类型字符串(比如[object Object])。所以,会有下面的结果。
isNaN({}) // true
如果toString方法返回的不是原始类型的值,结果就会报错。
var obj = {
valueOf: function () {
return {};
},
toString: function () {
return {};
}
};
isNaN(obj)
// TypeError: Cannot convert object to primitive value
上面代码的valueOf和toString方法,返回的都是对象,所以转成数值时会报错。
从上面的例子可以看出,valueOf和toString方法,都是可以自定义的。
isNaN({
valueOf: function () {
return 2;
}
})
// false
isNaN({
toString: function () {
return 3;
}
})
// false
为了更好的解释先运行的valueOf()方法,可以进行如下测试,Number() 和 isNaN()行为类似
Number({
valueOf: function () {
return 2;
},
toString: function () {
return 3;
}
})
// 2
解释的够清楚了,哈哈,望采纳
这篇关于JavaScript中的isNaN()函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文