扫码关注官方订阅号
我用isNaN来判断参数是否是数字,可是怎么会把对象也算进数字来呢?
数组按说只包含数字就对了啊,里面还有个对象。好奇怪。 null我还能理解,__ob__:Ti 又是什么鬼?
暂时先这样写好了,能解决问题。
为何浏览器console里显示数组里有个__ob__:Ti ?
认证高级PHP讲师
Number(null)为0,所有isNaN(null)等于false。_ob_应该是你用了什么库,给Array.prototype加了方法。
用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'){..}作为判断.
Number(null)
if(!isNaN(ID) && typeof ID != 'object'){..}
if(!isNaN(ID) && typeof ID == 'string'){..}
很简单 你把id 全部输出一下 对应一下 就能知道哪个id输出的是哪个 再逐一解决
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
Number(null)为0,所有isNaN(null)等于false。
_ob_应该是你用了什么库,给Array.prototype加了方法。
这句是有问题的,为什么呢?因为你的参数都是字符串,只是是一种可以转成数字的字符串。在数组中放入的成员值有引号就知道了。
如果是真的数字类型,就在ID宣告时就要先强转型为数字类型才是好一些的作法,用一元正号(+)即可:
会用上isNaN的目的主要是要判断出NaN,因为NaN无法用严格相等比较(===)判断出来。
isNaN会先对参数作数字强转换,你不自己先转,它也会帮你转,不过判断出的结果有可能不是你要的。
参数为字符串的结果有时候不一定是你要的,例如:
ES6中的Number.isNaN函数会比较精准,但浏览器支持很还少。用下面的代码可以填充出Number.isNaN:
实际上用typeof可以直接判断出数字类型,但如果不要NaN数字与0,写法是像下面这样:
这里估计是遇到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'){..}作为判断.
很简单 你把id 全部输出一下 对应一下 就能知道哪个id输出的是哪个 再逐一解决