1、Number()将部分非數字類型轉換為0
強制轉換為數值類型函數:
parseFloat、parseInt
優點:對非數值類型統一傳回NaN
缺點:會将一部分符合數值類型的字元串也識别為數值
parseFloat("1")//1
parseFloat("1s")//1,不是想要的
parseFloat(null)//NaN
parseFloat(undefined)//NaN
parseFloat("")//NaN
Number
優點:對于字元串必須全部符合數值類型才會轉換成功
缺點:會将部分非數值類型轉換為0
Number("1")//1
Number("1s")//NaN
Number(null)//0,不是想要的
Number(undebug)//NaN
Number("")//0,不是想要的
其中Number(null)和Number(“”)都會傳回0,而不是NaN,進而導緻了各種bug。
判斷是否是數值類型的解決方案
使用jquery提供的$.isNumeric函數判斷。
$.isNumeric("1")//true
$.isNumeric("1s")//false
$.isNumeric(null)//false
$.isNumeric(undefined)//false
$.isNumeric("")//false
全部正确,附jquery的$.isNumeric函數源碼:
isNumeric: function( obj ) {
// parseFloat NaNs numeric-cast false positives (null|true|false|"")
// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
// subtraction forces infinities to NaN
// adding 1 corrects loss of precision from parseFloat (#15100)
return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;
},
2、"".split(",")函數會傳回長度為1的數組
在說這個問題提之前需要先說下split函數的幾種特殊值的情況。
字元串的split函數的特殊值情況
1、參數不傳,傳回包含原字元串對象,長度為1的數組。
"".split()//[""]
"xxcanghai".split()//["xxcanghai"]
2、參數傳空字元串,傳回将原字元串每個字元分隔的數組
若原字元串為空字元串則傳回空數組
"".split("")//[]
"xxcanghai".split("")//["x", "x", "c", "a", "n", "g", "h", "a", "i"]
3、原字元串為空字元串,參數不為空時,會傳回包含一個空字元串的數組
"".split(",")//[""],錯誤,應為[]
"".split("xxcanghai")//[""],錯誤,應為[]
可見,原字元串長度為0,且分隔符長度大于0時,會傳回一個包含空字元串的數組。
因為這個問題,導緻了各種各樣的bug。
待續…
如果您認為本文對得起您所閱讀他所花的時間,歡迎點選右下角↘ 推薦。您的支援是我繼續寫作最大的動力,謝謝作者:小小滄海
出處:http://www.cnblogs.com/xxcanghai/
本文位址:http://www.cnblogs.com/xxcanghai/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。