JS里一切都是對象嗎?!

不知道之前在哪看的一句話:"在JS里,一切都是對象~",當時覺得還挺有道理的.畢竟像常用的函數(shù),數(shù)組等的確都是對象!(可以用typeof查看).

補充一句: typeof null // "object"
因為這個是js一開始的bug

來談?wù)勱P(guān)于 typeof 的原理吧,我們可以先想一個很有意思的問題心包,js 在底層是怎么存儲數(shù)據(jù)的類型信息呢类咧?或者說,一個 js 的變量蟹腾,在它的底層實現(xiàn)中痕惋,它的類型信息是怎么實現(xiàn)的呢?
其實娃殖,js 在底層存儲變量的時候值戳,會在變量的機器碼的低位1-3位存儲其類型信息

000:對象
010:浮點數(shù)
100:字符串
110:布爾
1:整數(shù)

but, 對于 undefined 和 null 來說,這兩個值的信息存儲是有點特殊的炉爆。
null:所有機器碼均為0
undefined:用 ?2^30 整數(shù)來表示
所以堕虹,typeof 在判斷 null 的時候就出現(xiàn)問題了卧晓,由于 null 的所有機器碼均為0,因此直接被當做了對象來看待赴捞。

真的全是對象嗎?

var a = ''
      b = 1
      c = new String('1')
      d = new Number(1)
typeof a // 'string'
typeof b // 'number'
typeof c // 'object'
typeof d // 'object'

為什么會出現(xiàn)這種差異呢?

因為js里有6中基本類型:
1.undefined // typeof undefined 'undefined'
2. null // typeof null 'object'
3. string //
4. number //
5. Boolean // typeof true 'boolean'
6. Symbol
當我們以字面量的方式創(chuàng)建string, number時,創(chuàng)建出來的屬于基本類型,而通過構(gòu)造器創(chuàng)造出來時它是一個對象!

但是!~ 竟然字面量創(chuàng)造出來的玩意兒不是對象,它為什么會有方法和屬性!!

var a = 'a'
a.toString() // 'a'
a.length // 1

按道理說屬性和方法應(yīng)該是對象特有的呀!
于是乎,引出了JS的另一個概念, 裝箱和拆箱!

JS里的裝箱和拆箱

概念:
1.裝箱指的是逼裆,將一個值變成指向該值的對象。(復(fù)制值)
2.拆箱指的是螟炫,把指向值的對象還原成該值波附。(復(fù)制值)

裝箱

var a = 'str'
a.toString()
當執(zhí)行toString()方法時,JS會自動將其包裝成String對象再調(diào)用方法.過程如下:
{ // 偽代碼
  var b = new String(a)
  b.toString()
  b = null
}
然后我們就看到了正常的輸出'a'

這個也可以解釋另外一個問題:

var a='str'
a.name='test'
console.log(a.name) // undefined

聰明的你一定可以想到這是為什么了!

拆箱

var a = new String('str')
console.log(a) // String {"str"}
var b = a + '1'
console.log(b) // str1

這里就是一個拆箱的過程,JS做的事情和上面裝箱類似.

var b = a + '1'
{
  var temp = a.toString() // or valueOf or
  var b = temp + '1' 
}

類型轉(zhuǎn)換時會經(jīng)常發(fā)生裝箱和拆箱操作,需要注意

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市昼钻,隨后出現(xiàn)的幾起案子掸屡,更是在濱河造成了極大的恐慌,老刑警劉巖然评,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仅财,死亡現(xiàn)場離奇詭異,居然都是意外死亡碗淌,警方通過查閱死者的電腦和手機盏求,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來亿眠,“玉大人碎罚,你說我怎么就攤上這事∧上瘢” “怎么了荆烈?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長竟趾。 經(jīng)常有香客問我憔购,道長,這世上最難降的妖魔是什么岔帽? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任玫鸟,我火速辦了婚禮,結(jié)果婚禮上犀勒,老公的妹妹穿的比我還像新娘屎飘。我一直安慰自己,他們只是感情好贾费,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布枚碗。 她就那樣靜靜地躺著,像睡著了一般铸本。 火紅的嫁衣襯著肌膚如雪肮雨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天箱玷,我揣著相機與錄音怨规,去河邊找鬼衅谷。 笑死椰棘,一個胖子當著我的面吹牛篮昧,可吹牛的內(nèi)容都是我干的暇昂。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼掰烟,長吁一口氣:“原來是場噩夢啊……” “哼爽蝴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起纫骑,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤蝎亚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后先馆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體发框,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年煤墙,在試婚紗的時候發(fā)現(xiàn)自己被綠了梅惯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡仿野,死狀恐怖铣减,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情脚作,我是刑警寧澤葫哗,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站鳖枕,受9級特大地震影響魄梯,放射性物質(zhì)發(fā)生泄漏桨螺。R本人自食惡果不足惜宾符,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望灭翔。 院中可真熱鬧魏烫,春花似錦、人聲如沸肝箱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽煌张。三九已至呐赡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間骏融,已是汗流浹背链嘀。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工萌狂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人怀泊。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓茫藏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親霹琼。 傳聞我的和親對象是個殘疾皇子务傲,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

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

  • 0. 寫在前面 當你開始工作時,你不是在給你自己寫代碼枣申,而是為后來人寫代碼售葡。 —— Nichloas C. Zak...
    康斌閱讀 5,297評論 1 42
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,118評論 0 13
  • 最終效果 如果tab選項卡在上面糯而,一是會占用可貴的寬屏幕可憐的高度資源天通;另外就是顯示不了太多(在設(shè)置中,可以設(shè)置 ...
    yisky閱讀 741評論 0 0
  • 下午快下班的時候熄驼,我在活動聚會群里留言:“銀馬健身俱樂部快開了像寒,那個陳經(jīng)理約了我好幾次,想去看下瓜贾,有沒有同行的诺祸,到...
    壹個人説閱讀 295評論 0 0
  • 念舊是一種間歇性慢性病 在平凡的生活里會在以往的生活里過濾出最美好的精華然后去懷念它,正是這種身不由己回不去的無奈...
    cheerhoo閱讀 70評論 0 0