JS對象到字符串捕虽,對象到數(shù)字的轉(zhuǎn)換細節(jié)

本文提到的對象到字符串和數(shù)字的轉(zhuǎn)換規(guī)則只適用于本地對象慨丐。什么是本地對象呢?本地對象也叫做內(nèi)置對象泄私,也就是JS標準規(guī)范定義的對象或類房揭。比如Array, object, function, data, global。還有一類對象即宿主對象挖滤,顧名思義崩溪,宿主,宿主斩松,就要有一個寄生的對象和環(huán)境伶唯,在JS中宿主對象都是寄生在瀏覽器中的。在瀏覽器中才存在的對象惧盹。比如event乳幸,BOM 和DOM對象皆是。

本地對象都繼承了倆個轉(zhuǎn)換方法钧椰,toString()valueOf()粹断。

對象到字符串的轉(zhuǎn)換過程

toString()方法用在對象上面,比如function, array,object嫡霞,返回的值都差不多瓶埋,都是返回這個對象的源碼。但是是以字符串表示的形式诊沪。例如:
var a = [1,2]; var b = a.toString(); console.log(b); typeof b; //1,2 //"string"
函數(shù)類返回的結果也類似养筒,可以從下面的實例中看出來:
var fun = function() { return "hello world!"; } var obj = fun.toString(); console.log(obj); typeof obj; //function () { return "hello world!"; } //"string"
valueOf存在任意原始值,它就默認將對象轉(zhuǎn)換為表示它的原始值端姚。如果是復合值呢晕粪,和toString方法一樣,即返回本身渐裸。但是還是和toString()方法有區(qū)別巫湘,tostring返回的是以字符串形式表示,valueOf()返回的是以對象的形式表示:
var arr = [true, "string"]; var obj = arr.valueOf(); console.log(obj); typeof obj; // [true, "string"] //"object"

var a = {}; a.toString(); a.valueOf(); //"[object Object]" //Object {}
對象是空對象時昏鹃,不管是toString方法或者valueof返回的形式有點讓人很迷惑尚氛,toString()看上去更上一個對象的表示,不過對他們用typeof以查看就清楚了然了洞渤,toString返回的確是一個字符串表示的對象形式怠褐,而valueof返回的才是真正的對象。
var b = a.toString(); var c = a.valueOf(); console.log(typeof b); //string console.log( typeof c) //object
如果讓對象和進行比較呢 您宪?又會發(fā)生什么,比如:
var a = {}; var c = a.toString(); console.log(a==c); // true
這里在進行比較的時候奈懒,我們可以看到奠涌,a在執(zhí)行了toString方法之后,就是一個字符串磷杏,但是在比較的時候溜畅,既字符串和對象比較的時候,返回的是true极祸,a是一個對象慈格,在比較時發(fā)生了隱式的類型轉(zhuǎn)換。遵循對象到字符串先調(diào)用tostring的方法遥金。那如果我們手動把a用valueOf轉(zhuǎn)換一下呢浴捆。 比如:
var d = a.valueOf(); console.log(d==c); // true
console.log(c); // [object Object] console.log(d); // Object {} console.log(d===c);
情況還是和上面是一樣的,但是如果不想他們進行自動轉(zhuǎn)換就要使用嚴格相等了稿械,這樣的情況下选泻,我們可以很清楚的看到返回的false。
console.log(d===c); // false

數(shù)組的在執(zhí)行了之上的過程也是一樣的美莫。在此就不贅述了页眯。

總結

對象到字符串的轉(zhuǎn)換

首先調(diào)用toString方法,只有當toString不返回一個原始值的時候厢呵,才會調(diào)用valueOf()窝撵。toString方法但是基本上所有對象都返回字符串。所以對象到字符串形式的轉(zhuǎn)換基本都是使用toString方法襟铭。
倆個方法都不返回原始值時碌奉,會拋出錯誤。

對象到數(shù)字的轉(zhuǎn)換過程

首先調(diào)用的valueOf(),如果返回原始值寒砖,將原始值轉(zhuǎn)換為數(shù)字并返回赐劣。valueOf,基本上所有的 對象返回的都是對象入撒,雖然先使用valueOf隆豹,但是實際上也是使用的toString的方法椭岩。

我們明白了這些規(guī)則有什么用茅逮?比如為什么空數(shù)組轉(zhuǎn)換為數(shù)字是?單個數(shù)組的元素為數(shù)字的同樣轉(zhuǎn)換為一個數(shù)字
判哥,比如:
var rr = [], dd = 2; console.log(rr < dd); // true
為什么返回true,因為在執(zhí)行比較的時候献雅,是對象和數(shù)字的比較,需要先把對象轉(zhuǎn)換數(shù)字塌计,先把rr對象進行隱式的類型轉(zhuǎn)換挺身,調(diào)用valueOf方法,但是返回的是一個對象锌仅,所以調(diào)用toString章钾,toString方法返回的是一個空的字符串墙贱,空的字符串直接轉(zhuǎn)換為0;JS引擎在內(nèi)部運算的時候,我的理解是隱形的執(zhí)行了這些元算贱傀;
var gg = rr.toString(); Number(gg); //0
運算符惨撇,及其他比較大小的運算符時,都會做對象到原始值的轉(zhuǎn)換府寒,對象到原始值的轉(zhuǎn)換基本都是對象到數(shù)字的轉(zhuǎn)換魁衙,但是要除去日期對象的特殊情形,日期對象 到原始值轉(zhuǎn)換規(guī)則為對象到字符串模式株搔。本篇文章是對《JS權威指南》第三章對象到原始值的轉(zhuǎn)換的一個讀書筆記剖淀。如果有什么的描述的不對,敬請指正纤房!

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末纵隔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子帆卓,更是在濱河造成了極大的恐慌巨朦,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剑令,死亡現(xiàn)場離奇詭異糊啡,居然都是意外死亡,警方通過查閱死者的電腦和手機吁津,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門棚蓄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人碍脏,你說我怎么就攤上這事梭依。” “怎么了典尾?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵役拴,是天一觀的道長。 經(jīng)常有香客問我钾埂,道長河闰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任褥紫,我火速辦了婚禮姜性,結果婚禮上,老公的妹妹穿的比我還像新娘髓考。我一直安慰自己部念,他們只是感情好,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著儡炼,像睡著了一般妓湘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乌询,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天多柑,我揣著相機與錄音,去河邊找鬼楣责。 笑死竣灌,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的秆麸。 我是一名探鬼主播初嘹,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼沮趣!你這毒婦竟也來了屯烦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤房铭,失蹤者是張志新(化名)和其女友劉穎驻龟,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缸匪,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡翁狐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了凌蔬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片露懒。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖砂心,靈堂內(nèi)的尸體忽然破棺而出懈词,到底是詐尸還是另有隱情,我是刑警寧澤辩诞,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布坎弯,位于F島的核電站,受9級特大地震影響译暂,放射性物質(zhì)發(fā)生泄漏抠忘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一秧秉、第九天 我趴在偏房一處隱蔽的房頂上張望褐桌。 院中可真熱鬧衰抑,春花似錦象迎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽啦撮。三九已至,卻和暖如春汪厨,著一層夾襖步出監(jiān)牢的瞬間赃春,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工劫乱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留织中,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓衷戈,卻偏偏與公主長得像狭吼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子殖妇,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容