你真瞭解parseFloat嗎?

        今天看了一下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

相關文章
相關標籤/搜索