最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡單介紹JavaScript數(shù)據(jù)類型之隱式類型轉(zhuǎn)換

 更新時間:2015年12月28日 14:23:54   投稿:mrr  
這篇文章主要介紹了簡單介紹JavaScript數(shù)據(jù)類型之隱式類型轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下

JavaScript的數(shù)據(jù)類型分為六種,分別為null,undefined,boolean,string,number,object。object是引用類型,其它的五種是基本類型或者是原始類型。我們可以用typeof方法打印來某個是屬于哪個類型的。不同類型的變量比較要先轉(zhuǎn)類型,叫做類型轉(zhuǎn)換,類型轉(zhuǎn)換也叫隱式轉(zhuǎn)換。隱式轉(zhuǎn)換通常發(fā)生在運算符加減乘除,等于,還有小于,大于等。。

typeof '11' //string    
typeof(11)  //number
'11' < 4   //false

本章節(jié)單獨介紹一下javascript中的隱式數(shù)據(jù)類型轉(zhuǎn)換,對于它的良好掌握,在實際應(yīng)用能夠簡化很多操作。

看如下代碼實例:

var arr = [5];
console.log(arr+"");

上面的代碼就是將數(shù)組隱式轉(zhuǎn)換為字符串的一個操作,是不是要比下面的方式要簡單不少:

var arr = [5];
console.log(arr.toString());

像上面類似的隱式數(shù)據(jù)類型轉(zhuǎn)換在實際編碼中應(yīng)用很多,下面進入正題。

一.值類型之間的數(shù)據(jù)類型轉(zhuǎn)換:

javascript中的數(shù)據(jù)類型可以參閱javascript數(shù)據(jù)類型詳解一章節(jié)。

(1).數(shù)字和字符串使用+運算符:

數(shù)字和字符串如果使用+運算符進行操作,那么會將數(shù)字先轉(zhuǎn)換為字符串,然后進行字符串連接操作:

var antzone = "antzone";
var num = 8;
console.log(antzone+num);

(2).布爾值參與的+運算符操作:

如果有布爾型參與,那么首先會將布爾值轉(zhuǎn)換為對應(yīng)的數(shù)字或者字符串,然后再進行相應(yīng)的字符串連接或者算數(shù)運算。

var bool = true;
var num = 8;
console.log(bool + num);

上面的代碼是先將true轉(zhuǎn)換為數(shù)字1,然后再進行算數(shù)加運算。

var bool = true;
var num = "8";
console.log(bool + num);

上面的布爾值會被轉(zhuǎn)換為對應(yīng)的字符串形式"true",然后再進行字符串連接。

(3).減法操作:

如果進行減法操作,那么兩個操作數(shù)都會先被轉(zhuǎn)換為數(shù)字,然后在進行算數(shù)運算:

var bool = true;
var num = "8";
console.log(bool - num);

true會被轉(zhuǎn)換為數(shù)字1,字符串"8"會被轉(zhuǎn)換為數(shù)字8,然后進行算術(shù)運算。

乘,除,大于,小于跟減的轉(zhuǎn)換也是一樣,就不再舉例子了。

(4).==等性運算:

undefined和null比較特殊,它們兩個使用==運算符返回值是true。

console.log(undefined==null);

其他值類型進行比較的時候都會將運算數(shù)轉(zhuǎn)換為數(shù)字

console.log("3"==3);

上面的代碼會將字符串"3"轉(zhuǎn)換成數(shù)字,然后再進行比較。

console.log("1"==true);

上面的代碼會分別將"1"和true轉(zhuǎn)換成數(shù)字,然后進行比較。

二.引用類型轉(zhuǎn)值類型:

引用類型(對象)轉(zhuǎn)換為值類型則要復(fù)雜很多,下面分布展開介紹。

對象繼承的兩個方法可以幫助我們實現(xiàn)對象到值類型的轉(zhuǎn)換功能:

(1).toString()方法。

(2).valueOf()方法。

通常情況下我們認(rèn)為,將一個對象轉(zhuǎn)換為字符串要調(diào)用toString()方法,轉(zhuǎn)換為數(shù)字要調(diào)用valueOf()方法,但是真正應(yīng)用的時候并沒有這么簡單,看如下代碼實例:

var obj = {
 webName: "腳本之家",
 url:"softwhy.com"
}
console.log(obj.toString());

從上面的代碼可以看出,toString()方法并沒有將對象轉(zhuǎn)換為一個能夠反映此對象的字符串。

var arr = [1, 2, 3];
console.log(arr.valueOf());

從上面的代碼可以看出,valueOf()方法并沒有將對象轉(zhuǎn)換為能夠反映此對象的一個數(shù)字。

var arr = [1, 2, 3];
console.log(arr.toString());

數(shù)組對象的toString()方法能夠?qū)?shù)組轉(zhuǎn)換為能夠反映此數(shù)組對象的字符串。

總結(jié)如下:

(1).有些對象只是簡單繼承了toString()或者valueOf()方法,比如第一個例子。
(2).有些對象則不但是繼承了兩個方法,而且還進行了重寫。

所以有些對象的方法能夠達成轉(zhuǎn)換成字符串或者數(shù)字的目標(biāo),有些則不能。

調(diào)用toString()或者valueOf()將對象轉(zhuǎn)換成字符串或者數(shù)字的規(guī)則如下:

調(diào)用toString()時,如果對象具有這個方法,則調(diào)用此方法;如果此方法返回一個值類型數(shù)據(jù),那么就返回這個值類型數(shù)據(jù),然后再根據(jù)所處的上下文環(huán)境進行相關(guān)數(shù)據(jù)類型轉(zhuǎn)換。如果沒有toString(),或者此方法返回值并不是一個值類型數(shù)據(jù),那么就會調(diào)用valueOf()(如果此方法存在的話),如果valueOf()返回一個值類型數(shù)據(jù),那么再根據(jù)所處的上下文環(huán)境進行相關(guān)的數(shù)據(jù)類型轉(zhuǎn)換。

進一步說明:

(1).上面介紹了通常默認(rèn)情況下valueOf()和toString()方法的作用(將對象轉(zhuǎn)換為數(shù)字或者字符串),但是需要注意的是,這并不是硬性規(guī)定,也就是說并不是valueOf()方法必須要返回數(shù)字或者toString()方法必須要轉(zhuǎn)換為字符串,比如簡單繼承的這兩個方法就無法進行實現(xiàn)轉(zhuǎn)換為數(shù)字和字符串的功能,再比如,我們可以自己稱謝這兩個方法,返回值也沒有必要是數(shù)字或者字符串。

(2).還有需要特別注意的一點就是,很多朋友認(rèn)為,轉(zhuǎn)換為字符串首先要調(diào)用toString()方法, 其實這是錯誤的認(rèn)識,我們應(yīng)該這么理解,調(diào)用toString()方法可以轉(zhuǎn)換為字符串,但不一定轉(zhuǎn)換字符串就是首先調(diào)用toString()方法。

看如下代碼實例:

var arr = [];
arr.valueOf = function () { return "1"; }
arr.toString = function () { return "2"; }
console.log(arr + "1");

上面的代碼中,arr是要被轉(zhuǎn)換為字符串的,但是很明顯是調(diào)用的valueOf()方法,而沒有調(diào)用toString()方法。有些朋友可能會有這樣的質(zhì)疑,難道[2]這樣的數(shù)字轉(zhuǎn)換成字符串"2",不是調(diào)用的toString()方法嗎。

代碼如下:

var arr = [2];
console.log(arr + "1");

其實過程是這樣的,首先arr會首先調(diào)用valueOf()方法,但是數(shù)字的此方法是簡單繼承而來,并沒有重寫(當(dāng)然這個重寫不是我們實現(xiàn)),返回值是數(shù)組對象本身,并不是一個值類型,所以就轉(zhuǎn)而調(diào)用toString()方法,于是就實現(xiàn)了轉(zhuǎn)換為字符串的目的。

總結(jié)如下:

大多數(shù)對象隱式轉(zhuǎn)換為值類型都是首先嘗試調(diào)用valueOf()方法。但是Date對象是個例外,此對象的valueOf()和toString()方法都經(jīng)過精心重寫,默認(rèn)是調(diào)用toString()方法,比如使用+運算符,如果在其他算數(shù)運算環(huán)境中,則會轉(zhuǎn)而調(diào)用valueOf()方法。

代碼實例如下:

var date = new Date();
console.log(date + "1");
console.log(date + 1);
console.log(date - 1);
console.log(date * 1);

以上內(nèi)容是小編給大家介紹的JavaScript數(shù)據(jù)類型之隱式類型轉(zhuǎn)換的全部內(nèi)容,希望大家喜歡。

相關(guān)文章

最新評論

娄烦县| 乌兰浩特市| 客服| 龙南县| 万年县| 仪征市| 乐都县| 山西省| 织金县| 车致| 墨玉县| 固原市| 东丽区| 洪湖市| 兴城市| 博客| 黑水县| 汨罗市| 承德市| 新乡县| 道真| 长乐市| 绿春县| 犍为县| 库车县| 溧水县| 舞钢市| 纳雍县| 合水县| 津南区| 乌兰浩特市| 安乡县| 新津县| 东丰县| 朝阳市| 双牌县| 新郑市| 海盐县| 故城县| 浪卡子县| 龙井市|