首頁  >  文章  >  web前端  >  淺析JavaScript中的隱式型別轉換_javascript技巧

淺析JavaScript中的隱式型別轉換_javascript技巧

WBOY
WBOY原創
2016-05-16 17:10:441032瀏覽

如果把透過函數或方法調用,明確的將某種類型轉換成另一種類型稱為顯示轉換 ,相反則稱為隱式類型轉換 。 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; 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





複製程式碼

代碼如下: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);


複製程式碼


代碼如下:
var ary = [1,3,55,7 ]; for(var a in ary){     alert(a ": " typeof a); } 三、 alert🎜>三、 alert時存在時存在的隱式類型轉換複製程式碼 代碼如下: .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())時會隱式的將其轉換成數字。
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn