toString()方法詳解


 

在類型轉換中,經常用到方法valueOf()和toString(),上一篇講了valueOf()方法,這一篇來說說toString()方法。toSting()方法返回返回對象的字符串表現。

【1】基本包裝類型——Boolean型

復制代碼
var obj = new Boolean(true);
   console.log(obj.toString());//"true"
   console.log(typeof obj.toString());//string
   //如果是包裝類型的基本類型,則返回原基本類型值
    var a = true;
   console.log(a.toString());//"true"
   console.log(typeof a.toString());//string
復制代碼

如果是基本包裝類型對應的基本類型,會返回原值。但這並不代表基本類型擁有toString()方法(基本類型不是對象,不擁有任何方法),而是在讀取一個基本類型值時,后台會創建一個對應的基本包裝類型的對象,從而調用一些方法。所以,基本類型“調用”toString()方法時,實際上是先創建了一個對應的基本包裝類型,由此基本包裝類型調用toString()最后返回了其對應的字符串,看起來就好像是基本類型調用了toString()方法而得到了對應的字符串。

【2】基本包裝類型——String型

復制代碼
   var obj = new String("hello");
   console.log(obj.toString());//hello
   console.log(typeof obj.toString());//string
   //如果是包裝類型的基本類型,則返回原基本類型值
    var a = "hello";
   console.log(a.toString());//hello
   console.log(typeof a.toString());//string
復制代碼

同【1】,String基本包裝類型和基本類型調用toString()方法都返回對應的字符串

【3】基本包裝類型——Number型

復制代碼
   var obj = new Number("123");
   console.log(obj.toString());//123
   console.log(typeof obj.toString());//string
   //如果是包裝類型的基本類型,則返回原基本類型值
    var a = 123;
   console.log(a.toString());//123
   console.log(typeof a.toString());//string
復制代碼

同【1】,Number基本包裝類型和基本類型調用toString()方法都返回對應的字符串。

注意,如果直接用整數調用時,要加上括號,否則會報錯。因為整數后面的點會識別為小數點。浮點型不會報錯。

console.log(123.toString());//Uncaught SyntaxError
   console.log((123).toString());//"123"
   console.log(12.3.toString());//"12.3"

此外,數字類型的toString()方法可以接收表示轉換基數(可選,2-36中的任何數字),如果不指定此參數,轉換規則將是基於十進制。

復制代碼
var n = 33;
console.log(n.toString());//'33'
console.log(n.toString(2));//'100001'
console.log(n.toString(3));//'41'
console.log(n.toString(10));//'33'
console.log(n.toString(16));//'21'
console.log(n.toString(37));//Uncaught RangeError: toString() radix argument must be between 2 and 36
復制代碼

【4】數組Array類型(返回數組內容組成的字符串)

   var a = [1,2,3,4];
   console.log(a.toString());//"1,2,3,4"
   console.log(typeof a.toString());//string

【5】函數Function類型(返回函數代碼字符串)

   var a = function(){};
   console.log(a.toString());//"function(){};"
   console.log(typeof a.toString());//string

【6】正則RegExp類型(返回原正則表達式的字符串表示)

var a = /a/g;
   console.log(a.toString());///"a/g"
   console.log(typeof a.toString());//string

 【7】Date類型(返回表示當前時間的字符串)

   var obj = new Date();
   console.log(obj);//Wed May 10 2017 18:20:05 GMT+0800 (中國標准時間)
   console.log(typeof obj);//object
   console.log(obj.toString());//"Wed May 10 2017 18:20:05 GMT+0800 (中國標准時間)"
   console.log(typeof obj.toString());//string

 【7】對象Object類型及自定義對象類型(返回[object Object])

復制代碼
var obj = {a:1};
   console.log(obj.toString());//"[object Object]"
   console.log(typeof obj.toString());//string
   function Foo(){};
   var foo = new Foo();
   console.log(foo.toString());//"[object Object]"
   console.log(typeof foo.toString());//string
復制代碼

在判斷對象的類型時,用Object.prototype.toString()返回字符串“[object 對象類型]”,但無法判斷自定義對象的類型。

小結

1)undefined和null沒有此方法(基本類型肯定沒有方法,String、Number和Boolean是因為有對應的基本包裝類型,才可以調用方法);

2)Date類型返回表示時間的字符串;

3)Object類型返回字符串“[object Object]”。

與valueOf()對比

1)toString()和valueOf()的主要不同點在於,toString()返回的是字符串,而valueOf()返回的是原對象

2)由於undefined和null不是對象,所以它們toString()和valueOf()兩個方法都沒有

3)數值Number類型的toString()方法可以接收轉換基數,返回不同進制的字符串形式的數值;而valueOf()方法無法接受轉換基數

4)時間Date類型的toString()方法返回的表示時間的字符串表示;而valueOf()方法返回的是現在到1970年1月1日00:00:00的數值類型的毫秒數

5)包裝對象的valueOf()方法返回該包裝對象對應的原始值

 與轉型函數String()函數的對比

toString()和String()都是將數據轉換為對應的字符串,有如下區別:

1)String()可以將任何類型的值轉換為字符串,包括undefined和null;

console.log(String(null));//"null"
console.log(String(undefined));//"undefined"

2)String()不能接受數值基數作為參數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM