pythonisnan函数_JavaScript中的isNaN()函数

本文探讨了JavaScript中isNaN函数的行为,特别是当应用于对象时的类型转换过程。包括valueOf和toString方法的作用及其如何影响NaN判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

请看下面的例子。

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

解释的够清楚了,哈哈,望采纳

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值