刚刚接触前端开发,今天在使用 isNaN()验证的时候遇到一些小彩弹:
<input id="phone" type="text" placeholder="13000000000">
一个电话号码的验证:
if (isNaN(value)) {
alert("Sorry, phone number is wrong!");
} else{
alert("111111");
}
当输入内容为空或空格的时候, 仍然会弹出”111111”. 也就是说isNaN()返回了false, 里面到底做了什么操作会漏掉这两种情况呢?
isNaN()在使用的时候会存在隐式转换, 其内部使用 Number() 方法尝试将操作的内容转换为数字,
如果返回NaN, isNaN()–>true, 否则 isNaN() –>true.
而 Number(“”)会返回 0.
Number(” “)也同样会返回0.
console.log(Number("")); // >> 0
console.log(Number(" ")); // >> 0
console.log(Number("123455asadfasd")); // >> NaN
所以isNaN() 会将这两个情况认为是数字0, 返回true.
在使用 isNaN() 时需要慎重.