淺析JavaScript中的隱式類(lèi)型轉(zhuǎn)換
如果把通過(guò)函數(shù)或方法調(diào)用,明確的將某種類(lèi)型轉(zhuǎn)換成另一種類(lèi)型稱(chēng)為顯示轉(zhuǎn)換 ,相反則稱(chēng)為隱式類(lèi)型轉(zhuǎn)換 。google和維基百科中沒(méi)有找到“顯示類(lèi)型轉(zhuǎn)換”,“隱式類(lèi)型轉(zhuǎn)換”的字眼。暫且這么稱(chēng)呼。
一、 運(yùn)算中存在的隱式類(lèi)型轉(zhuǎn)換
1, “+”運(yùn)算符
var a = 11, b = '22';
var c = a + b;
這里引擎將會(huì)先把a(bǔ)變成字符串"11"再與b進(jìn)行連接,變成了"1122"。有人會(huì)有疑問(wèn),為什么不把b變成數(shù)字22再進(jìn)行算術(shù)加運(yùn)算呢,這樣的話c就是33了。沒(méi)有為什么,當(dāng)運(yùn)算符“+”兩邊一個(gè)是數(shù)字類(lèi)型,一個(gè)是字符串類(lèi)型時(shí),js引擎規(guī)定進(jìn)行字符串連接運(yùn)算而非算術(shù)加運(yùn)算。利用運(yùn)算符“+”這個(gè)特性,可以很方便的將Number轉(zhuǎn)換成String。如
var a = 11;
alert(typeof a); //-->number
a = a + '';
alert(typeof a); //-->string
2,“-”運(yùn)算符
“-”可以是一元運(yùn)算符(取負(fù)),也可以是二元(減法運(yùn)算)的。如
var a = 11, b = '5';
var c = a - b;
alert(typeof c); //--> number
這里與上面的“+”相反,會(huì)把字符串b隱式的轉(zhuǎn)換成數(shù)字5再進(jìn)行算術(shù)減法運(yùn)算。利用這個(gè)特性,可以很方便的將String轉(zhuǎn)換成Number
var a = '11';
a = a - '';
alert(typeof a);// -->number
二、 語(yǔ)句中存在的隱式類(lèi)型轉(zhuǎn)換
1,if
var obj = {name:'jack'}
if(obj){
//do more
}
這里會(huì)把obj隱式的轉(zhuǎn)換成Boolean類(lèi)型
2,while
var obj = {name:'jack'}
while(obj){
//do more
}
同if
3,for in時(shí)的類(lèi)型轉(zhuǎn)換
定義對(duì)象字面量時(shí)發(fā)生從標(biāo)識(shí)符到字符串的隱式轉(zhuǎn)換。
var person = {'name':'jack',"age":20,school:'PKU'};
for(var a in person){
alert(a + ": " + typeof a);
}
這里name,age分別加單/雙引號(hào)以強(qiáng)調(diào)其為String類(lèi)型,school沒(méi)有加單/雙引號(hào)。我們遍歷下該對(duì)象的屬性,查看其類(lèi)型。發(fā)現(xiàn)school也被隱式的轉(zhuǎn)換成了String類(lèi)型。
數(shù)組的索引其實(shí)也是字符串類(lèi)型。這著實(shí)令人驚嘆,但事實(shí)的確如此。如
var ary = [1,3,5,7];
for(var a in ary){
alert(a + ": " + typeof a);
}
三、 alert時(shí)存在的隱式類(lèi)型轉(zhuǎn)換
String.prototype.fn = function(){return this};
var a = 'hello';
alert(typeof a.fn()); //-->object
alert(a.fn()); //-->hello
給String原型上添加了個(gè)fn方法,該方法返回this,我們知道this可以理解成當(dāng)前類(lèi)的實(shí)例對(duì)象,既然是對(duì)象那么typeof a.fn()自然返回是object了。
關(guān)鍵是最后的alert(a.fn()),a.fn()返回的明明是對(duì)象,但卻隱式的轉(zhuǎn)換成了字符串“hello”顯示。
同樣的情況發(fā)生在數(shù)字類(lèi)型上,如
Number.prototype.fn = function(){return this};
var a = 10;
alert(typeof a.fn());//-->object
alert(a.fn()); //-->10
a.fn()返回的是對(duì)象類(lèi)型,但在alert(a.fn())時(shí)會(huì)隱式的將其轉(zhuǎn)換成數(shù)字。
- JavaScript隱式類(lèi)型轉(zhuǎn)換
- 總結(jié)Javascript中的隱式類(lèi)型轉(zhuǎn)換
- 對(duì)存在JavaScript隱式類(lèi)型轉(zhuǎn)換的四種情況的總結(jié)(必看篇)
- JavaScript中運(yùn)算符規(guī)則和隱式類(lèi)型轉(zhuǎn)換示例詳解
- JS面試題大坑之隱式類(lèi)型轉(zhuǎn)換實(shí)例代碼
- 有趣的JavaScript隱式類(lèi)型轉(zhuǎn)換操作實(shí)例分析
- JavaScript隱式類(lèi)型轉(zhuǎn)換代碼實(shí)例
- JavaScript隱式類(lèi)型轉(zhuǎn)換例子總結(jié)
- 淺析JavaScript中的隱式類(lèi)型轉(zhuǎn)換
- JavaScript 隱式類(lèi)型轉(zhuǎn)換規(guī)則詳解
- JS不同運(yùn)算符下隱式類(lèi)型轉(zhuǎn)換的實(shí)現(xiàn)示例
相關(guān)文章
webpack+vue2構(gòu)建vue項(xiàng)目骨架的方法
本篇文章主要介紹了webpack+vue2構(gòu)建vue項(xiàng)目骨架的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01發(fā)布一個(gè)基于javascript的動(dòng)畫(huà)類(lèi) Fx.js
支持大部分CSS3屬性的動(dòng)畫(huà)(可能要指定詳細(xì)的屬性值)。2010-11-11firefox下對(duì)ajax的onreadystatechange的支持情況分析
firefox下對(duì)ajax的onreadystatechange的支持分析。用的到的朋友可以參考下。2009-12-12javascript對(duì)數(shù)組的常用操作代碼 數(shù)組方法總匯
js下數(shù)組也是比較常用的,對(duì)數(shù)組元素的處理也是有非常多的方法,這里整理了下,需要的朋友可以參考下。2011-01-01javaScript 頁(yè)面自動(dòng)加載事件詳解
本篇文章主要是對(duì)javaScript頁(yè)面自動(dòng)加載事件進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-02-02js限制文本框的輸入內(nèi)容代碼分享(3類(lèi))
這篇文章主要介紹了3類(lèi)js限制文本框的輸入內(nèi)容代碼,需要的朋友可以參考下2015-08-08前端強(qiáng)大的圖片預(yù)覽組件Viewer.js使用方法
這篇文章主要給大家介紹了關(guān)于前端強(qiáng)大的圖片預(yù)覽組件Viewer.js使用方法的相關(guān)資料,Viewer.js是一款強(qiáng)大的圖片查看器,雖然簡(jiǎn)單且易上手,但是卻并不影響其在圖片查看方面的強(qiáng)大功能,同時(shí)這款優(yōu)秀的插件配置操作起來(lái)也非常的方便,需要的朋友可以參考下2024-01-01