Hello,大家好。很多前端面試的試題都會考到其他類型到數值類型的轉換。特別是在隱式轉換的時候會特別的多,現在我們就對這一點進行討論:
其他類型轉換爲數值類型的值大致分爲4種情況:
(1)基本類型的參數轉換爲數值:
基本類型轉換爲數值其實很簡單也很基礎但是需要加強記憶:
null:0
undefined:NAN
數值:保持不變
true:1
flase:0
string:類似於使用Number的方法將字符串轉換爲數值,即數值的字符串形式可以正確的轉換爲數值其他的則會轉換爲NAN。
(2)正常對象類型轉換爲數值
正常對象轉換爲數值首先將會進行是否toString的方法轉換爲基本的數據類型,然後再使用ToNumber的方法轉換爲數值,比如:
[]:0
[3]:4
[1,2,3]先轉換爲字符串爲1,2,3再轉換爲數值NAN
{}轉換爲字符串的形式爲"Object object",再轉換爲數值NAN
(3)定義valueof方法的對象
對於對象具有valueof方法,將會調用valueof方法,並對valueof方法的返回值進行轉換參考上述的(1)和(2)。
比如對象的vlaueof方法爲的返回值爲字符串"12",定義對象a={a:"jkdgh"}。進行轉換爲數值時根據得到的返回值爲"12",再將其轉換爲數值12.
(4)定義toString方法的方法的對象
對於對象具有toString方法,將會調用toString方法,並對toString方法的返回值進行轉換參考上述的(1)和(2)。
比如對象的toString方法爲的返回值爲字符串"789",定義對象a={a:"jkdgh"}。進行轉換爲數值時根據得到的返回值爲"789",再將其轉換爲數值789.
(5)由於對象的valueof方法和toString方法都會影響對象轉換爲數值的結果,現在對對象同時定義valueof方法和toString方法進行查看兩者的優先級。
定義valueof方法返回字符串12,定義toString方法返回字符串"789",得到的對象的值爲12,所有valueof的優先級高於toString,在有valueof的情況下優先使用valueof。
例子如下:
Object.prototype.valueOf=function(){return "12"}
Object.prototype.toString=function(return "789")
a={a:4}
當使用+a強制把對象a轉換爲整數時得到的數據爲12.