JS 里的類型

1.JS 里的數(shù)據(jù)

1.1.轉(zhuǎn)化為字符串(console.log就是這個(gè)原理)

1.1.1.tostring





null和undefined沒有tostring這個(gè)API碰辅。所以也無法轉(zhuǎn)化類型篙贸。API就是對象废睦?鍵值對的集合堆缘?

函數(shù)也行娶靡,函數(shù)當(dāng)作一個(gè)對象寫在里面也行韵洋。


Number捧颅、string景图、Boolean自己就是API,自己里面又有tostring這個(gè)對象或者說這個(gè)API

1.1.2.但是tostring很難寫碉哑,老司機(jī)不是這么寫的

通過類型+ ''挚币,就可以轉(zhuǎn)化為字符串



本來不同類型是不能相加的,但是你偏這么寫了瀏覽器就幫你把數(shù)字先轉(zhuǎn)化為字符串扣典,然后再把字符串拼接起來妆毕。

1.1.3.window.String


1.2.轉(zhuǎn)化為布爾

Boolean


!!任何東西取反兩次就是布爾


js轉(zhuǎn)化布爾的時(shí)候只有5個(gè)false。這些要記下來贮尖。false自己就不算了笛粘,它自己當(dāng)然是false了


mdn falsy


1.3.轉(zhuǎn)為number


parseInt的時(shí)候后面的10就是10進(jìn)制的意思。parseFloat不用加幾進(jìn)制湿硝,因?yàn)楦↑c(diǎn)數(shù)都是10進(jìn)制表示的薪前。

第四種是字符減一個(gè)0,第五種是字符前面用一個(gè)+关斜,但是用的最多的還是第4中因?yàn)楹美斫馐纠ǎ?種可能會理解錯(cuò)。


考試重點(diǎn)考第二種痢畜。



這個(gè)parseInt的意思是把字符解析成int垛膝,所以能解析多少就解析多少鳍侣。所以parseInt('1s')只會解析1

1.4.轉(zhuǎn)null和undefined沒有意義

1.5.轉(zhuǎn)化成對象

2.內(nèi)存圖


瀏覽器妖給HTML+CSS渲染引擎,JS引擎吼拥,HTTP引擎還有其他東西倚聚。


代碼區(qū)和數(shù)據(jù)區(qū),數(shù)據(jù)區(qū)又分stack棧內(nèi)存和heap堆內(nèi)存


1.瀏覽器首先在代碼區(qū)左變量提升凿可,把變量都拿到最上面去惑折。把a(bǔ),b,o,c都放到第一行去

2.然后在stack里面用64位里面,寫了一個(gè)1這個(gè)內(nèi)存是對應(yīng)a的怎么對應(yīng)引擎自己會搞定矿酵。

3.然后同理把b給存了唬复。

4.然后發(fā)現(xiàn)o那就繼續(xù)存,一個(gè)字符會用掉2字節(jié)全肮,16位。所以一行可以放4個(gè)字符棘捣。所以o就專業(yè)楊存掉了辜腺。

5.然后存c

6.然后給o加屬性,這時(shí)候就尷尬了乍恐,c已經(jīng)在前面了评疗。所以只能把c往下移∫鹆遥空出后發(fā)現(xiàn)不夠再移百匆。那如果已經(jīng)有100個(gè)c怎么辦,都往下移嗎呜投。所以非常慢加匈。


上面提出的問題的解決方案是:o在stack內(nèi)存里就不放o的內(nèi)容我放一個(gè)地址,實(shí)際內(nèi)容放到heap內(nèi)存里面仑荐。每次聲明了對象以后就會隨機(jī)給stack一個(gè)heap的地址雕拼。heap想加就加不會限制大小,heap好像很大粘招。

另外如果兩個(gè)對象賦值啥寇。比如var o2= o1不是heap里面復(fù)制o1再覆蓋o2。而是直接把o1的地址復(fù)制一下給o2洒扎。讓o2直接指向o1就行了辑甜。那o2原來的內(nèi)容應(yīng)該會被回收。

引用:對象的變量名是鍵值對的引用袍冷。stack是heap的引用


變量之間的賦值磷醋,都是賦值stack里面的內(nèi)容。變量和對象之間的賦值是把對象的地址給變量难裆。比如b = { 'name' : 'b'}意思是先創(chuàng)建出{'name' : 'b'}在heap里面子檀。然后把這些東西的地址給b镊掖。所以a.name = a .

所以stack里面的賦值和heap給stack賦值是不一樣的。


為什么是self是undefined呢褂痰,因?yàn)殚_始變量上提以后亩进,a就被掛到stack上面了。然后生成{self: a}這時(shí)候還沒把{self: a}的地址給a缩歪,所以a是沒有定義的归薛。

對象的聲明分三部分:

1.變量上提,放到stack

2.heap上面創(chuàng)建對象匪蝙,同時(shí)擁有該對象的地址

3.把地址給變量


如果先聲明a = { }就會有地址了主籍,空的對象也行,反正有容器了就會給一個(gè)地址了逛球。



可以把a(bǔ).x = a = { n: 2}拆成a.x = a; a= {n: 2}

然后每次畫圖的時(shí)候stack這邊就把heap的對象的地址寫上去千元。然后對象里面=變量的話,把變量的內(nèi)容即地址寫上去颤绕⌒液#基本不會錯(cuò)了。


heap沒有被stack引用將被回收奥务。什么 時(shí)候回收物独。瀏覽器自己判斷它覺得內(nèi)存不太夠了就會來回收。賦值時(shí)右邊給左邊氯葬。a = b是b賦值給a



所以fn不是垃圾挡篓,document.body.onclick = fn這個(gè)圖要畫出來。

只有document是在stack里面帚称,document里面的屬性就算是對象官研,他的變量名也是存放heap里面的地址,它自己也在heap里面世杀。



這樣寫的話fn就被回收了阀参。畫圖的時(shí)候時(shí)刻想著對象名放的是對象值的地址。

深拷貝瞻坝、淺拷貝

引用


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛛壳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子所刀,更是在濱河造成了極大的恐慌衙荐,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浮创,死亡現(xiàn)場離奇詭異忧吟,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)斩披,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門溜族,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讹俊,“玉大人,你說我怎么就攤上這事煌抒∪耘” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵寡壮,是天一觀的道長贩疙。 經(jīng)常有香客問我,道長况既,這世上最難降的妖魔是什么这溅? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮棒仍,結(jié)果婚禮上悲靴,老公的妹妹穿的比我還像新娘。我一直安慰自己莫其,他們只是感情好对竣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著榜配,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吕晌。 梳的紋絲不亂的頭發(fā)上蛋褥,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機(jī)與錄音睛驳,去河邊找鬼烙心。 笑死,一個(gè)胖子當(dāng)著我的面吹牛乏沸,可吹牛的內(nèi)容都是我干的淫茵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蹬跃,長吁一口氣:“原來是場噩夢啊……” “哼匙瘪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蝶缀,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤丹喻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后翁都,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碍论,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年柄慰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鳍悠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片税娜。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖藏研,靈堂內(nèi)的尸體忽然破棺而出敬矩,到底是詐尸還是另有隱情,我是刑警寧澤遥倦,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布谤绳,位于F島的核電站,受9級特大地震影響袒哥,放射性物質(zhì)發(fā)生泄漏缩筛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一堡称、第九天 我趴在偏房一處隱蔽的房頂上張望瞎抛。 院中可真熱鬧,春花似錦却紧、人聲如沸桐臊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽断凶。三九已至,卻和暖如春巫俺,著一層夾襖步出監(jiān)牢的瞬間认烁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工介汹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留却嗡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓嘹承,卻偏偏與公主長得像窗价,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子叹卷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354

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

  • 類型轉(zhuǎn)換 轉(zhuǎn)換為string撼港、boolean 類型轉(zhuǎn)換中的一些特殊情況: 其他類型轉(zhuǎn)換為boolean時(shí)為fals...
    格林姆大師閱讀 144評論 0 0
  • null 上面報(bào)錯(cuò)的意思:toString點(diǎn)前面的是null,因?yàn)閚ull沒有toString這個(gè)API豪娜,所以會報(bào)...
    小志1閱讀 191評論 0 0
  • 內(nèi)置類型 JS中一共有七個(gè)內(nèi)置類型: number string boolean undefined null o...
    squall1744閱讀 518評論 0 2
  • 類型轉(zhuǎn)換1. 轉(zhuǎn)換為 字符串toString() 方法返回一個(gè)表示該對象的字符串 MDN語法:object.toS...
    半齋閱讀 278評論 0 0
  • 艾奇一只住在青蛙王國的青蛙公主餐胀,她從小聽父王講《井底之蛙》的故事。 她有一天她問她的侍女:“為什么那只青蛙要跳到井...
    四夕米糕閱讀 301評論 0 0