這篇文章主要是對JavaScript中的隱式類型轉換進行了詳細分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助
如果把通過函數或方法調用,明確的將某種類型轉換成另一種類型稱為顯示轉換 ,相反則稱為隱式類型轉換 。google和維基百科中沒有找到“顯示類型轉換”,“隱式類型轉換”的字眼。暫且這麼稱呼。 一、 運算中存在的隱式類型轉換 1, “+”運算符 代碼如下: var a = 11, b = '22'; var c = a + b; 這裡引擎將會先把a變成字符串"11"再與b進行連接,變成了"1122"。有人會有疑問,為什麼不把b變成數字22再進行算術加運算呢,這樣的話c就是33了。沒有為什麼,當運算符“+”兩邊一個是數字類型,一個是字符串類型時,js引擎規定進行字符串連接運算而非算術加運算。利用運算符“+”這個特性,可以很方便的將Number轉換成String。如 代碼如下: var a = 11; alert(typeof a); //-->number a = a + ''; alert(typeof a); //-->string 2,“-”運算符 “-”可以是一元運算符(取負),也可以是二元(減法運算)的。如 代碼如下: var a = 11, b = '5'; var c = a - b; alert(typeof c); //--> number 這裡與上面的“+”相反,會把字符串b隱式的轉換成數字5再進行算術減法運算。利用這個特性,可以很方便的將String轉換成Number 復制代碼 代碼如下: var a = '11'; a = a - ''; alert(typeof a);// -->number 二、 語句中存在的隱式類型轉換 1,if 代碼如下: var obj = {name:'jack'} if(obj){ //do more } 這裡會把obj隱式的轉換成Boolean類型 2,while 代碼如下: var obj = {name:'jack'} while(obj){ //do more } 同if 3,for in時的類型轉換 定義對象字面量時發生從標識符到字符串的隱式轉換。 代碼如下: var person = {'name':'jack',"age":20,school:'PKU'}; for(var a in person){ alert(a + ": " + typeof a); } 這裡name,age分別加單/雙引號以強調其為String類型,school沒有加單/雙引號。我們遍歷下該對象的屬性,查看其類型。發現school也被隱式的轉換成了String類型。 數組的索引其實也是字符串類型。這著實令人驚歎,但事實的確如此。如 代碼如下: var ary = [1,3,5,7]; for(var a in ary){ alert(a + ": " + typeof a); } 三、 alert時存在的隱式類型轉換 代碼如下: String.prototype.fn = function(){return this}; var a = 'hello'; alert(typeof a.fn()); //-->object alert(a.fn()); //-->hello 給String原型上添加了個fn方法,該方法返回this,我們知道this可以理解成當前類的實例對象,既然是對象那麼typeof a.fn()自然返回是object了。 關鍵是最後的alert(a.fn()),a.fn()返回的明明是對象,但卻隱式的轉換成了字符串“hello”顯示。 同樣的情況發生在數字類型上,如 代碼如下: Number.prototype.fn = function(){return this}; var a = 10; alert(typeof a.fn());//-->object alert(a.fn()); //-->10 a.fn()返回的是對象類型,但在alert(a.fn())時會隱式的將其轉換成數字。