js中判斷一個變量是否為數字類型的疑問


1.typeof(a)=="number" 是true,但是a instanceof Number卻為false,不理解

2.isNaN()不能判斷一個變量是否為數字類型,isNaN(123)值為false,isNaN('123')值也為false。
isNaN() 的實際作用跟它的名字isNaN並不一致,isNaN(NaN)值為true,isNaN(Number("xyz"))值為true,isNaN(“abc”)值為true,isNaN(123/0)值為false,

所以它實際是將不能轉換成number類型的其他類型及其自身NaN都判斷為true,而除了其自身NaN外所有的number類型都判斷為false(NaN的類型也是number),

能轉換成number類型的其他類型也判斷為false,比如‘123’類型是string,但判斷為false。
typeof(num)=="number" 較為准確,但NaN也是number類型,Number("xyz")也是number類型,如果你只要區分123跟‘123’,那就沒什么問題了,可以用typeof(num)==="number"。 如果要排除除數為0的情況,要再判斷(num!==Infinity),即(typeof(num)=="number")&&(num!==Infinity)。
再全面一點:(typeof(num)==="number")&&(num!==Infinity)&&!isNaN(num)

資料:
Number.isNaN()已經被添加到了ECMAScript 6中,Firefox已經實現了。
代碼如下:
Number.isNaN = function (value) {
return typeof value === 'number' && isNaN(value);
};


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM