在類型轉(zhuǎn)換中,經(jīng)常用到方法
valueOf()
和toString()
奋姿,所有對象(包括基本包裝類型)都擁有這兩個方法。這篇文章我們先看看valueOf()
方法。valueOf()
方法會將對象轉(zhuǎn)換為基本類型颠通,如果無法轉(zhuǎn)換為基本類型,則返回原對象膀懈。
【1】基本包裝類型——Boolean型
var obj = new Boolean(true);
console.log(obj.valueOf());//true
console.log(typeof obj.valueOf());//boolean
//如果是包裝類型的基本類型顿锰,則返回原基本類型值
var a = true;
console.log(a.valueOf());//true
console.log(typeof a.valueOf());//boolean
如果是基本包裝類型對應(yīng)的基本類型,會返回原值启搂。但這并不代表基本類型擁有valueOf()
方法(基本類型不是對象硼控,不擁有任何方法),而是在讀取一個基本類型值時胳赌,后臺會創(chuàng)建一個對應(yīng)的基本包裝類型的對象牢撼,從而調(diào)用一些方法。所以疑苫,基本類型“調(diào)用”valueOf()
方法時熏版,實(shí)際上是先創(chuàng)建了一個對應(yīng)的基本包裝類型,由此基本包裝類型調(diào)用valueOf()
捍掺,最后返回了其對應(yīng)的基本類型撼短,看起來就好像是基本類型調(diào)用了valueOf()
方法而得到了原始值。
【2】基本包裝類型——String型
var obj = new String("hello");
console.log(obj.valueOf());//hello
console.log(typeof obj.valueOf());//string
//如果是包裝類型的基本類型挺勿,則返回原基本類型值
var a = "hello";
console.log(a.valueOf());//hello
console.log(typeof a.valueOf());//string
同【1】曲横,String基本包裝類型和基本類型調(diào)用valueOf()方法都返回對應(yīng)的基本類型
【3】基本包裝類型——Number型
var obj = new Number("123");
console.log(obj.valueOf());//123
console.log(typeof obj.valueOf());//number
//如果是包裝類型的基本類型,則返回原基本類型值
var a = 123;
console.log(a.valueOf());//123
console.log(typeof a.valueOf());//number
同【1】不瓶,Number基本包裝類型和基本類型調(diào)用valueOf()方法都返回對應(yīng)的基本類型禾嫉。
注意,如果直接用整數(shù)調(diào)用時湃番,要加上括號夭织,否則會報錯。因?yàn)檎麛?shù)后面的點(diǎn)會識別為小數(shù)點(diǎn)吠撮。浮點(diǎn)型不會報錯尊惰。
console.log(123.valueOf());//Uncaught SyntaxError
console.log((123).valueOf());//123
console.log(12.3.valueOf());//12.3
【4】數(shù)組Array類型(返回原數(shù)組)
var a = [1];
console.log(a.valueOf());//[1]
console.log(a === a.valueOf());//true
【5】函數(shù)Function類型(返回原函數(shù))
var a = function(){};
console.log(a.valueOf());//function(){};
console.log(a === a.valueOf());//true
【6】正則RegExp類型(返回原正則對象)
var a = /a/g;
console.log(a.valueOf());///a/g
console.log(a === a.valueOf());//true
【7】對象Object類型
var obj = {a:1};
console.log(obj.valueOf());//Object{a:1}
console.log(obj === obj.valueOf());//true
【8】Date類型(返回表示當(dāng)前時間的數(shù)值)
var obj = new Date();
console.log(obj);//Wed May 10 2017 12:19:05 GMT+0800 (中國標(biāo)準(zhǔn)時間)
console.log(obj.valueOf());//1494389910179
console.log(obj === obj.valueOf());//false
console.log(obj.getTime() === obj.valueOf());//true
小結(jié):
undefined和null沒有此方法(基本類型肯定沒有方法讲竿,String、Number和Boolean是因?yàn)橛袑?yīng)的基本包裝類型弄屡,才可以調(diào)用方法)题禀;
基本包裝類型和對應(yīng)的基本類型,調(diào)用valueOf()返回對應(yīng)的基本類型值膀捷;
對象類型(除Date類型)返回原對象迈嘹;
Date類型返回表示日期的毫秒數(shù)
參考這位博主的文章