簡單介紹JavaScript資料類型之隱式類型轉換,javascript資料類型

來源:互聯網
上載者:User

簡單介紹JavaScript資料類型之隱式類型轉換,javascript資料類型

JavaScript的資料類型分為六種,分別為null,undefined,boolean,string,number,object。object是參考型別,其它的五種是基本類型或者是原始類型。我們可以用typeof方法列印來某個是屬於哪個類型的。不同類型的變數比較要先轉類型,叫做類型轉換,類型轉換也叫隱式轉換。隱式轉換通常發生在運算子加減乘除,等於,還有小於,大於等。。

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

本章節單獨介紹一下javascript中的隱式資料類型轉換,對於它的良好掌握,在實際應用能夠簡化很多操作。

看如下代碼執行個體:

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

上面的代碼就是將數組隱式轉換為字串的一個操作,是不是要比下面的方式要簡單不少:

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

像上面類似的隱式資料類型轉換在實際編碼中應用很多,下面進入正題。

一.實值型別之間的資料類型轉換:

javascript中的資料類型可以參閱javascript資料類型詳解一章節。

(1).數字和字串使用+運算子:

數字和字串如果使用+運算子進行操作,那麼會將數字先轉換為字串,然後進行字串串連操作:

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

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

如果有布爾型參與,那麼首先會將布爾值轉換為對應的數字或者字串,然後再進行相應的字串串連或者算數運算。

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

上面的代碼是先將true轉換為數字1,然後再進行算數加運算。

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

上面的布爾值會被轉換為對應的字串形式"true",然後再進行字串串連。

(3).減法操作:

如果進行減法操作,那麼兩個運算元都會先被轉換為數字,然後在進行算數運算:

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

true會被轉換為數字1,字串"8"會被轉換為數字8,然後進行算術運算。

乘,除,大於,小於跟減的轉換也是一樣,就不再舉例子了。

(4).==等性運算:

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

console.log(undefined==null);

其他實值型別進行比較的時候都會將運算數轉換為數字

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

上面的代碼會將字串"3"轉換成數字,然後再進行比較。

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

上面的代碼會分別將"1"和true轉換成數字,然後進行比較。

二.參考型別轉實值型別:

參考型別(對象)轉換為實值型別則要複雜很多,下面分布展開介紹。

對象繼承的兩個方法可以協助我們實現對象到實值型別的轉換功能:

(1).toString()方法。

(2).valueOf()方法。

通常情況下我們認為,將一個對象轉換為字串要調用toString()方法,轉換為數字要調用valueOf()方法,但是真正應用的時候並沒有這麼簡單,看如下代碼執行個體:

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

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

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

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

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

數組對象的toString()方法能夠將數群組轉換為能夠反映此數組對象的字串。

總結如下:

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

所以有些對象的方法能夠達成轉換成字串或者數位目標,有些則不能。

調用toString()或者valueOf()將對象轉換成字串或者數位規則如下:

調用toString()時,如果對象具有這個方法,則調用此方法;如果此方法返回一個實值型別資料,那麼就返回這個實值型別資料,然後再根據所處的上下文環境進行相關資料類型轉換。如果沒有toString(),或者此方法傳回值並不是一個實值型別資料,那麼就會調用valueOf()(如果此方法存在的話),如果valueOf()返回一個實值型別資料,那麼再根據所處的上下文環境進行相關的資料類型轉換。

進一步說明:

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

(2).還有需要特別注意的一點就是,很多朋友認為,轉換為字串首先要調用toString()方法, 其實這是錯誤的認識,我們應該這麼理解,調用toString()方法可以轉換為字串,但不一定轉換字串就是首先調用toString()方法。

看如下代碼執行個體:

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

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

代碼如下:

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

其實過程是這樣的,首先arr會首先調用valueOf()方法,但是數位此方法是簡單繼承而來,並沒有重寫(當然這個重寫不是我們實現),傳回值是數組對象本身,並不是一個實值型別,所以就轉而調用toString()方法,於是就實現了轉換為字串的目的。

總結如下:

大多數對象隱式轉換為實值型別都是首先嘗試調用valueOf()方法。但是Date對象是個例外,此對象的valueOf()和toString()方法都經過精心重寫,預設是調用toString()方法,比如使用+運算子,如果在其他算數運算環境中,則會轉而調用valueOf()方法。

代碼執行個體如下:

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

以上內容是小編給大家介紹的JavaScript資料類型之隱式類型轉換的全部內容,希望大家喜歡。

您可能感興趣的文章:
  • 淺析JavaScript中的隱式類型轉換
  • JS對象與json字串格式轉換執行個體
  • Go語言中轉換JSON資料簡單例子
  • php json轉換成數組形式代碼分享
  • js與C#進行時間戳記轉換
  • nodejs中轉換URL字串與查詢字串詳解
  • JavaScript中number轉換成string介紹
  • js擷取時間並實現字串和時間戳記之間的轉換
  • 跟我學習javascript的隱式強制轉換

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.