我用isNaN来判断参数是否是数字,可是怎么会把对象也算进数字来呢?
数组按说只包含数字就对了啊,里面还有个对象。好奇怪。 null我还能理解,__ob__:Ti 又是什么鬼?
暂时先这样写好了,能解决问题。
为何浏览器console里显示数组里有个__ob__:Ti ?
我用isNaN来判断参数是否是数字,可是怎么会把对象也算进数字来呢?
数组按说只包含数字就对了啊,里面还有个对象。好奇怪。 null我还能理解,__ob__:Ti 又是什么鬼?
暂时先这样写好了,能解决问题。
为何浏览器console里显示数组里有个__ob__:Ti ?
用isNaN来判断参数是否是数字
这句是有问题的,为什么呢?因为你的参数都是字符串,只是是一种可以转成数字的字符串。在数组中放入的成员值有引号就知道了。
如果是真的数字类型,就在ID宣告时就要先强转型为数字类型才是好一些的作法,用一元正号(+)即可:
var ID = +(eleGenres[i].getAttribute('data-value'));
会用上isNaN的目的主要是要判断出NaN,因为NaN无法用严格相等比较(===)判断出来。
isNaN会先对参数作数字强转换,你不自己先转,它也会帮你转,不过判断出的结果有可能不是你要的。
isNaN(NaN); // true
isNaN(undefined); // true
isNaN({}); // true
isNaN(true); // false
isNaN(null); // false
isNaN(37); // false
isNaN('37'); // false
参数为字符串的结果有时候不一定是你要的,例如:
isNaN("123ABC"); // true
isNaN(""); //false
isNaN("blabla"); // true
ES6中的Number.isNaN函数会比较精准,但浏览器支持很还少。用下面的代码可以填充出Number.isNaN:
Number.isNaN = Number.isNaN || function(value) {
return typeof value === "number" && isNaN(value);
}
实际上用typeof可以直接判断出数字类型,但如果不要NaN数字与0,写法是像下面这样:
var ID = +(eleGenres[i].getAttribute('data-value'));
if(typeof ID === "number" && !isNaN(ID) && ID){
//...ID是你要的
}else{
//...ID不是你要的
}
这里估计是遇到js类型转换的坑了,你考虑过这种情况没有?if(data-value=="")ID=new String("");换句话说,楼主你能保证你var的ID都能为数字的字符串?
因为Number(null)
会返回0,isNaN()内部会先调用Number(value)转换下值,然后再比较,所以
isNaN(null),即isNaN(0),会返回false,可以用if(!isNaN(ID) && typeof ID != 'object'){..}
或者if(!isNaN(ID) && typeof ID == 'string'){..}
作为判断.
13 回答12.9k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
Number(null)为0,所有isNaN(null)等于false。
_ob_应该是你用了什么库,给Array.prototype加了方法。