国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

淺析JavaScript中的隱式類型轉換

2019-11-20 21:31:12
字體:
來源:轉載
供稿:網友

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 镇康县| 康平县| 龙陵县| 家居| 唐海县| 沭阳县| 即墨市| 苏尼特右旗| 孝义市| 奎屯市| 梁河县| 大宁县| 卢氏县| 武威市| 龙江县| 英山县| 泸定县| 临潭县| 贡山| 华阴市| 开远市| 繁昌县| 鹤岗市| 鄂尔多斯市| 五大连池市| 新昌县| 温泉县| 宣化县| 平舆县| 宣武区| 读书| 城步| 淳化县| 来宾市| 凤凰县| 莱州市| 托里县| 桑植县| 建昌县| 呼玛县| 辽中县|