請原諒我發佈另一個答案,但我剛到這裏通過谷歌搜索,做沒有找到我想要的所有細節。在Node.js的運行下面的代碼:
var vals = ["1", "1.1", "0", "1.1abc", "", " ", null];
for(var i = 0; i < vals.length; i++){
var ifTest = false;
if(vals[i])
{
ifTest = true;
}
console.log("val=" + vals[i] + ", Number()=" + Number(vals[i])+ ", parseFloat()=" + parseFloat(vals[i]) + ", if()=" + ifTest);
}
給出了下面的輸出:
val=1, Number()=1, parseFloat()=1, if()=true
val=1.1, Number()=1.1, parseFloat()=1.1, if()=true
val=0, Number()=0, parseFloat()=0, if()=true
val=1.1abc, Number()=NaN, parseFloat()=1.1, if()=true
val=, Number()=0, parseFloat()=NaN, if()=false
val= , Number()=0, parseFloat()=NaN, if()=true
val=null, Number()=0, parseFloat()=NaN, if()=false
一些值得注意的外賣:
- 如果想轉換之前,如果(VAL)保護數字,然後parseFloat()將返回一個數字,除了在空白的情況下。
- 數字在所有情況下都會返回一個數字,除了空格之外的非數字字符。
請隨時添加我可能會丟失的任何測試用例。
那麼,如果我做'新號碼(...)'會發生什麼?這有什麼不同? – Neal 2012-08-16 13:50:29
'typeof new Number(3)===「object」',而'typeof 3 ===「number」'和'typeof Number(3)===「number」' – jackwanders 2012-08-16 13:53:03
您會得到一個Number對象在非嚴格比較中,將調用'valueOf'方法,但與非對象的嚴格比較將失敗。這是一個糟糕的主意,因爲混亂的數字對象國際海事組織(以及它的價值,克羅克福德也不喜歡他們) – 2012-08-16 13:54:55