在類型轉(zhuǎn)換中烂瘫,經(jīng)常用到方法
valueOf()
和toString()
,上一篇講了valueOf()方法评抚,這一篇來(lái)說(shuō)說(shuō)toString()
方法谦秧。toSting()
方法返回返回對(duì)象的字符串表現(xiàn)。
【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
如果是基本包裝類型對(duì)應(yīng)的基本類型息罗,會(huì)返回原值。但這并不代表基本類型擁有toString()方法(基本類型不是對(duì)象才沧,不擁有任何方法)迈喉,而是在讀取一個(gè)基本類型值時(shí)绍刮,后臺(tái)會(huì)創(chuàng)建一個(gè)對(duì)應(yīng)的基本包裝類型的對(duì)象,從而調(diào)用一些方法挨摸。所以孩革,基本類型“調(diào)用”toString()
方法時(shí),實(shí)際上是先創(chuàng)建了一個(gè)對(duì)應(yīng)的基本包裝類型得运,由此基本包裝類型調(diào)用toString()
最后返回了其對(duì)應(yīng)的字符串膝蜈,看起來(lái)就好像是基本類型調(diào)用了toString()
方法而得到了對(duì)應(yīng)的字符串。
【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基本包裝類型和基本類型調(diào)用toString()方法都返回對(duì)應(yīng)的字符串
【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基本包裝類型和基本類型調(diào)用toString()方法都返回對(duì)應(yīng)的字符串推沸。
注意,如果直接用整數(shù)調(diào)用時(shí)券坞,要加上括號(hào)鬓催,否則會(huì)報(bào)錯(cuò)。因?yàn)檎麛?shù)后面的點(diǎn)會(huì)識(shí)別為小數(shù)點(diǎn)恨锚。浮點(diǎn)型不會(huì)報(bào)錯(cuò)宇驾。
console.log(123.toString());//Uncaught SyntaxError
console.log((123).toString());//"123"
console.log(12.3.toString());//"12.3"
此外,數(shù)字類型的toString()方法可以接收表示轉(zhuǎn)換基數(shù)(可選眠冈,2-36中的任何數(shù)字)飞苇,如果不指定此參數(shù)菌瘫,轉(zhuǎn)換規(guī)則將是基于十進(jìn)制蜗顽。
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】數(shù)組Array類型(返回?cái)?shù)組內(nèi)容組成的字符串)
var a = [1,2,3,4];
console.log(a.toString());//"1,2,3,4"
console.log(typeof a.toString());//string
【5】函數(shù)Function類型(返回函數(shù)代碼字符串)
var a = function(){};
console.log(a.toString());//"function(){};"
console.log(typeof a.toString());//string
【6】正則RegExp類型(返回原正則表達(dá)式的字符串表示)
var a = /a/g;
console.log(a.toString());///"a/g"
console.log(typeof a.toString());//string
【7】Date類型(返回表示當(dāng)前時(shí)間的字符串)
var obj = new Date();
console.log(obj);//Wed May 10 2017 18:20:05 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)
console.log(typeof obj);//object
console.log(obj.toString());//"Wed May 10 2017 18:20:05 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)"
console.log(typeof obj.toString());//string
【8】對(duì)象Object類型及自定義對(duì)象類型(返回[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
在判斷對(duì)象的類型時(shí),用Object.prototype.toString()返回字符串“[object 對(duì)象類型]”雨让,但無(wú)法判斷自定義對(duì)象的類型雇盖。
【小結(jié)】:
undefined
和null
沒(méi)有此方法(基本類型肯定沒(méi)有方法,String栖忠、Number和Boolean
是因?yàn)橛袑?duì)應(yīng)的基本包裝類型崔挖,才可以調(diào)用方法);Date
類型返回表示時(shí)間的字符串庵寞;Object
類型返回字符串[object Object]
【與valueOf()
對(duì)比】
toString()
和valueOf()
的主要不同點(diǎn)在于狸相,toString()
返回的是字符串,而valueOf()
返回的是原對(duì)象由于
undefined
和null
不是對(duì)象捐川,所以它們toString()
和valueOf()
兩個(gè)方法都沒(méi)有數(shù)值
Number
類型的toString()
方法可以接收轉(zhuǎn)換基數(shù)脓鹃,返回不同進(jìn)制的字符串形式的數(shù)值;而valueOf()
方法無(wú)法接受轉(zhuǎn)換基數(shù)時(shí)間
Date
類型的toString()
方法返回的表示時(shí)間的字符串表示古沥;而valueOf()
方法返回的是現(xiàn)在到1970年1月1日00:00:00的數(shù)值類型的毫秒數(shù)包裝對(duì)象的
valueOf()
方法返回該包裝對(duì)象對(duì)應(yīng)的原始值
【與轉(zhuǎn)型函數(shù)String()
函數(shù)的對(duì)比】
toString()
和String()
都是將數(shù)據(jù)轉(zhuǎn)換為對(duì)應(yīng)的字符串瘸右,有如下區(qū)別:
-
String()
可以將任何類型的值轉(zhuǎn)換為字符串娇跟,包括undefined和null
console.log(String(null));//"null"
console.log(String(undefined));//"undefined"
-
String()
不能接受數(shù)值基數(shù)作為參數(shù)
引用自這位博主的文章