今天看了一下parseFloat,寫下來與你們分享,本身也作一下筆記。 函數
相信不少人都知道JavaScript的parseFloat這個函數,但不必定很瞭解。包括我本身,之前我總覺得若是傳進去的參數是一個對象,那麼返回的應該就是NaN。 spa
但事實並不如此,咱們先來看看W3C上面對parseFloat的說明吧。parseFloat 是全局函數,不屬於任何對象。parseFloat 將它的字符串參數解析成爲浮點數並返回。若是在解析過程當中遇到了正負號(+ 或 -)、數字 (0-9)、小數點,或者科學記數法中的指數(e 或 E)之外的字符,則它會忽略該字符以及以後的全部字符,返回當前已經解析到的浮點數。同時參數字符串首位的空白符會被忽略。若是參數字符串的第一個字符不能被解析成爲數字,則 parseFloat 返回 NaN。這裏只是說明了parseFloat的用法,並無說它內部是怎麼操做的。 code
咱們再來看看ES5的規範是怎麼說的吧
對象
大意就是先轉成字符串,再轉爲數字,若是不能轉爲數字,則返回NaN。實驗一下,咱們來看3個例子: ip
var return_numStr = { toString : function() { console.log("toString invoke"); return "6.5536";//返回一個能夠轉爲數字的字符串 }, valueOf : function () { console.log("valueOf invoke"); return "6.5536"; } } parseFloat(return_numStr);//result : toString invoke!! return 6.55.36 var return_not_numStr_butPrimitive = { toString : function() { console.log("toString invoke"); return true;//返回的是primitive類型的值,但不能夠轉爲數字 }, valueOf : function () { console.log("valueOf invoke"); return "6.5536"; } } parseFloat(return_not_numStr_butPrimitive);//result : toString invoke!! return NaN! var return_not_primitive = { toString : function() { console.log("toString invoke"); return {};//返回不是primitive類型 }, valueOf : function () { console.log("valueOf invoke"); return "6.5536"; } } parseFloat(return_not_primitive);//result : toString invoke valueOf invoke too!!! return 6.5536
1.首先爲傳進來的參數調用toString方法,若是返回的是primitive類型(即Number,String, Boolean,Undefined,Null),則將此返回值轉爲字符串。再嘗試將字符串轉爲數字,若是不能轉成數字則返回NaN。(可參考實例代碼1, 2) 字符串
2.若是toString方法返回的不是ptimitive類型,則繼續調用valueOf方法。若是返回的是primitive類型,則將其轉爲字符串,再將字符串轉爲數字返回。 get
3.若是valueOf方法返回的也不是primitive類型,則返回NaN。 it