JS數(shù)據(jù)類型轉(zhuǎn)換

JS有5種簡單數(shù)據(jù)類型(也稱基本數(shù)據(jù)類型):undefined、null吆视、Boolean鲸沮、Number和String纫雁。還有兩種復雜數(shù)據(jù)類型——symbol(這里不做多介紹)和Object逞力,對象本質(zhì)上是由一組無序的名值對組成的曙寡,ECMAScring不支持任何創(chuàng)建自定義類型的機制,而所有值最終都將是上述7種數(shù)據(jù)類型之一寇荧。
數(shù)據(jù)類型的相互轉(zhuǎn)換

1.任意數(shù)據(jù)類型轉(zhuǎn)字符串

String(x)

String(1)//"1"

String(true)//"true"

String(null)//"null"

String(undefined)//"undefined"

String({})//"[Object Object]"

toString()

(1).toString()  //"1"

true.toString() //"true"

null.toString()  //Uncaught TypeError: Cannot read property 'toString' of null
 // at <anonymous>:1:6

undefined.toString()  //Uncaught TypeError: Cannot read property 'toString' of undefined
//at <anonymous>:1:11
{}.toString()   //Uncaught SyntaxError: Unexpected token .

({}).toString()  //"[object Object]"

老司機用法:x+''

1+''  //  "1"
true+'' // 'true'
null+'' // 'null'
undefined+'' // 'undefined'
{}+'' // 0
var o = {}
o+ '' //{object Object}
2.任意數(shù)據(jù)類型轉(zhuǎn)數(shù)字

1.Number(x)
2.parselnt(x举庶,10)MDN
3.parseFloat(x)MDN
4.x-0
5.+x

3.任意數(shù)據(jù)類型轉(zhuǎn)布爾值

1.Boolean(x)
2.!!x

4.五個falsy值

0 NaN '' null undefined .

5.內(nèi)存圖
  1. 你買一個 8G 的內(nèi)存條
  • 操作系統(tǒng)開機即占用 512MB
  • Chrome 打開即占用 1G 內(nèi)存
  • Chrome 各每個網(wǎng)頁分配一定數(shù)量的內(nèi)存
  • 這些內(nèi)存要分給頁面渲染器、網(wǎng)絡模塊砚亭、瀏覽器外殼和 JS 引擎(V8引擎)
  • JS 引擎將內(nèi)存分為代碼區(qū)和數(shù)據(jù)區(qū)
  • 我們只研究數(shù)據(jù)區(qū)
    *數(shù)據(jù)區(qū)分為 Stack(棧內(nèi)存) 和 Heap(堆內(nèi)存)
  • 簡單類型的數(shù)據(jù)直接存在 Stack 里
  • 復雜類型的數(shù)據(jù)是把 Heap 地址存在 Stack 里
    遇到問題就畫圖灯变,不要分析殴玛。

如果將復雜數(shù)據(jù)類型存放在棧內(nèi)存里面捅膘,那么向其中添加數(shù)據(jù)就很麻煩、一些數(shù)據(jù)就需要向后面移動滚粟。只需要在棧內(nèi)存中給代表復雜數(shù)據(jù)類型(對象)的變量存放一個地址(沒有指針寻仗,是引用)指向堆內(nèi)存中的數(shù)據(jù)。一個變量等于另一個復雜數(shù)據(jù)類型凡壤,就把地址復制給它署尤。
所有的變量和對象都是引用關系。

4個常見的面試題
var a = 1
var b = a
b = 2
請問 a 顯示是幾亚侠?  //1

var a = {name: 'a'}
var b = a
b = {name: 'b'}
請問現(xiàn)在 a.name 是多少曹体?//'a'

var a = {name: 'a'}
var b = a
b.name = 'b'
請問現(xiàn)在 a.name 是多少?//'b'

var a = {name: 'a'}
var b = a
b = null
請問現(xiàn)在 a 是什么硝烂?//{name: 'a'}

垃圾回收機制

GC 垃圾回收 如果一個對象沒有被引用箕别,那么它就是垃圾,將會被回收滞谢。
引用包括事件觸發(fā)引用串稀,如果一個函數(shù)被頁面上的事件引用了,也不會算作垃圾被回收狮杨。
解決辦法:將事件賦值null母截,就表示不再引用。
IE6 BUG 無法正常的在頁面關閉時橄教,將沒有人引用的垃圾正常的清除清寇。設置window.onunload事件喘漏,將所有的事件都設置為null。
內(nèi)存泄露:表示該被標記為垃圾的數(shù)據(jù)沒有被標記华烟,內(nèi)存就會被永久的占用陷遮。除非把整個瀏覽器關閉,否則瀏覽器就會吃很多的內(nèi)存垦江,無法再分配新的內(nèi)存用于存儲數(shù)據(jù)帽馋。*

深復制是什么鬼
var b = a
b = 2 //這個時候改變 b

a 完全不受 b 的影響
那么我們就說這是一個深復制
對于簡單類型的數(shù)據(jù)來說,賦值就是深拷貝比吭。
對于復雜類型的數(shù)據(jù)(對象)來說绽族,才要區(qū)分淺拷貝和深拷貝。

這是一個淺拷貝的例子

var a = {name: 'frank'}
var b = a
b.name = 'b'
a.name === 'b' // true

因為我們對 b 操作后衩藤,a 也變了

什么是深拷貝了吧慢,就是對 Heap 內(nèi)存進行完全的拷貝。

var a = {name: 'frank'}
var b = deepClone(a) // deepClone 還不知道怎么實現(xiàn)
b.name = 'b'
a.name === 'a' // true

對于基本類型變量赏表,簡單的賦值就是深拷貝检诗。改變一個變量,不影響賦值的變量瓢剿,兩者互不干擾逢慌。對于深淺拷貝,一般只討論復雜數(shù)據(jù)類型间狂。
復雜類型變量攻泼,a等于b,a改變導致b也會改變鉴象,這就是淺拷貝忙菠。因為只是將stack里面的地址復制了一份而已。復雜數(shù)據(jù)類型的深拷貝纺弊,會拷貝堆內(nèi)存里面的數(shù)據(jù)牛欢,包括數(shù)據(jù)內(nèi)的引用,將不再引用同一個地址淆游,而是引用新拷貝的數(shù)據(jù)的地址傍睹。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市稽犁,隨后出現(xiàn)的幾起案子焰望,更是在濱河造成了極大的恐慌,老刑警劉巖已亥,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熊赖,死亡現(xiàn)場離奇詭異,居然都是意外死亡虑椎,警方通過查閱死者的電腦和手機震鹉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門俱笛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人传趾,你說我怎么就攤上這事迎膜。” “怎么了浆兰?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵磕仅,是天一觀的道長。 經(jīng)常有香客問我簸呈,道長榕订,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任蜕便,我火速辦了婚禮劫恒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘轿腺。我一直安慰自己两嘴,他們只是感情好,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布族壳。 她就那樣靜靜地躺著憔辫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪决侈。 梳的紋絲不亂的頭發(fā)上螺垢,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天喧务,我揣著相機與錄音赖歌,去河邊找鬼。 笑死功茴,一個胖子當著我的面吹牛庐冯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播坎穿,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼展父,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了玲昧?” 一聲冷哼從身側(cè)響起栖茉,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎孵延,沒想到半個月后吕漂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡尘应,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年惶凝,在試婚紗的時候發(fā)現(xiàn)自己被綠了吼虎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡苍鲜,死狀恐怖思灰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情混滔,我是刑警寧澤洒疚,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站坯屿,受9級特大地震影響拳亿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜愿伴,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一肺魁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧隔节,春花似錦鹅经、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至幻妓,卻和暖如春蹦误,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肉津。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工强胰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人妹沙。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓偶洋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親距糖。 傳聞我的和親對象是個殘疾皇子玄窝,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

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