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);
};