在類型轉換中,經常用到方法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()不能接受數值基數作為參數