<script type="text/javascript">
var temp = "";
if (!isNaN(temp)) {
alert(123)
}
</script>
为什么会弹框啊?temp怎么成数字了?
isNaN里面的参数是必需值,不能检测空字符串的,如果要在这样用先验证是否为空
NaN是Not a Number的意思,空字符串当然不是数字了,所以true很正常啊
isNAN是判断是否是数字返回的是true和false,空格不是数字(本该返回false)但你在前面又加了个‘!’(‘!’否的意思)所有返回true(负负得正可以理解吧) 既然他返回的是真那么就认为他是数字 所有输出了数字 理解没
isNaN 不对空白字符做处理 需要预先处理
自己先判断长度吧!
这个和ECMAScript标准有关系;
JS属于弱类型的变成语言,就是类型之间定义很不明显,更可恶的是自动类型转换;
isNaN楼上几位都说的很清楚,检测提供的字符串是否为数字(is not a number);
"" :空字符串转换成数字就是0;别拍我,真的,自动类型转换搞的鬼.比如"" - 1 = -1;等
http://www.w3school.com.cn/js/jsref_isnan.asp这是对isNaN函数的详解,但是有误区(可以用 isNaN() 函数来检测算数错误,比如用 0 作除数的情况。这里说的不完整,如果分子可以转换成数字类型的,计算结果为infinity,也是数字);
一句话,isNaN检测参数时会进行一系列的转换,如果能转换成数字,则返回false,如果不能则返回true;
不知道说明白了没.
document.write(isNaN("")) // false document.write(isNaN(" ")) // false document.write(isNaN(0)) // false document.write(isNaN(null)) // false document.write(isNaN(false)) // false document.write("" == false) // true document.write("" == 0) // true document.write(" " == 0) // true document.write(" " == false) // true document.write(" " == 0) // true document.write(0 == false) // true document.write(" " == "") // false
不好解释,“ ”,false等同等于0的原故吧,这样用吧:
var temp = ""; if (!isNaN(parseInt(temp))) { alert(123) }
parseFloat(temp).tostring()="NaN"
parseInt(temp).tostring()="NaN"
玩
js把空白当作0了。就像true能转换为1一样。