NaN有兩個特點:
1 任何涉及NAN的操作都會返回NaN(這個特點在多步計算中可能有問題)
2NaN與任何值都不相等,包括它本身,例如下面的代碼也是返回false
alert(NaN == NaN)
針對NaN的這兩個特點,ECMAscript定義了isNaN()這個函數,該函數接收一個參數,該參數可以是任意數據類型,而且該參數可以幫我們確定這個參數是否“不是數值”。isNaN()
接收到一個值之后會將這個值轉換成數值。而某些不會轉換為數值的值都將返回true
數值轉換
js中數值轉換的函數有三個:parseInt()、parseFloat()、number()
parseInt ( cString )從字符串cString非空字符開始轉換得到的整數,遇到小數點或其他0-9外的字符就停止,如“-1234a”,“-1234.0”都將返回 -1234;如果除第一個符號外一個0-9字符都不是,將返回NaN,如“-a”、“abc”等;
Number( cString )從字符串cString轉換得到的數字,包括Int和Float類型,如:“-123”返回-123,“123”和“00123”都返回 123,“234。56”返回234。56等。cString必須是合法的數字串,否則返回NaN;如“.123”、“1.23.45”、 “--123”、“123a"都返回NaN.
總之Number( )更象parseFloat( ),Number對參數更挑剔,稍有不是數字就返回NaN。
parseFloat支持第一個非空字符為小數點,如parseFloat(".123" )返回0.123。
而Number(".123" )返回NaN。
空字符串或完全空格串健壯的parseFloat()返回NaN,而Number()返回0,這有點讓人費解。
除了不支持無前導0小數 (如.123、-.123)和支持多余的前導0(如-00123返回-123)多少不符合常規外,Number能用來驗證數字串!
