js中为什么 isNaN 为 true

 我来答
帐号已注销
2017-11-02 · TA获得超过353个赞
知道答主
回答量:87
采纳率:73%
帮助的人:19.2万
展开全部



1、isNaN是Ecmascript提供的内置对象Global的一个函数,如下代码即可以检测

console.log(typeof isNaN)//打印function

2、function自然不是Number类型啦,严格来说,funcion属于对象类型,在其他语言中function是单独的一种数据类型,但是在js中Function类型是Object类型的派生类型。js中数据类型有如下:

字符串、数字、布尔、数组、对象(包括函数)、Null、Undefined

3、那么得出的结论如下

//自定义的函数
var myfc=function() {}
//全局函数,isNaN为ecma内置对象global的函数
var gloabfc=isNaN;

//都是函数(函数的类型被ecma划分为对象类型)
console.log('myfc的数据类型为:'+typeof myfc)
console.log('gloabfc的数据类型为:'+typeof gloabfc)

//1、js是一门弱语言类型,其中弱指的是弱数据类型,也就是说变量的类型一开始并不会确定,当为变量赋值时会自动判断后隐式转换它的所有类型类型并进行转换。那么它的变量、表达式等在参与运算时,即使类型不正确,也能通过隐式转换来得到正确地类型。
//2、其他类型转为布尔运算时,如果一个对象(函数也是对象)存在,那么则为true。 如果不存在,会抛出异常,不是你想象中的false,哈哈!
//3、isNaN是存在一个函数,所以为true
function turnBoolean(param) {
if(param){
console.log(param+'的转换结果为:'+true)
}else{
console.log(param+'的转换结果为:'+false)
}
}
turnBoolean(myfc)
turnBoolean(gloabfc)

//其他数据类型转布尔值
turnBoolean(null)
turnBoolean(undefined)
turnBoolean(0)
turnBoolean('')
turnBoolean(1)
turnBoolean({})

其实总结就一句,因为isNaN函数(对象)存在,所以为true

凝雪
2017-11-02 · TA获得超过653个赞
知道小有建树答主
回答量:208
采纳率:50%
帮助的人:23.2万
展开全部

假入我们把{}的toString方法修改一下:

var obj = {};
obj.toString = function(){                   return 123;
};isNaN(obj);  //这里的结果就是false了

  • var obj = {};

  • obj.valueOf = function(){  console.log('call valueOf');  return 321; http://r.yuzhua.com你可以尝试把这里的 123, 改成 this 看看效果.};

  • obj.toString = function(){  console.log('call toString');  return 123;

  • };isNaN(obj);  //这里的结果就是false了console.log(ojb + 2);

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式