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

JS中的7種數(shù)據(jù)之間大部分是可以相互轉(zhuǎn)換的,這篇文章做一個小小的總結(jié)。

一.任意類型轉(zhuǎn)字符串

1.toString()方法。

true.toString = 'true'
({}).toString = '[object Object]'

對于數(shù)據(jù)類型nullundefined是不能夠用toString()方法的。
2.全局方法String()

String(1)
 '1'
String(true)
'true'
String(null)
 'null'
String(undefined)
'undefined'
String({})
'[object Object]'

3.任意類型用+拼接空字符串 ''

1 + ''
'1'
true + ''
'true'

需要注意的是當對象與空字符串拼接時次和,用以下方式:

{} + ''
0
var o = {}
o + ''
'[object Object]'

二.轉(zhuǎn)數(shù)字類型

1.全局方法 Number()
使用Number函數(shù),可以將任意類型的值轉(zhuǎn)化成數(shù)值那伐。Number函數(shù)將字符串轉(zhuǎn)為數(shù)值踏施,要比parseInt函數(shù)嚴格很多⌒酰基本上读规,只要有一個字符無法轉(zhuǎn)成數(shù)值,整個字符串就會被轉(zhuǎn)為NaN燃少。

  1. parseInt(x, 10) ,其具體的使用方式見:MDN

3.parseFloat(x) ,具體使用方式見:MDN

4.X - 0 铃在,當用字符串類型減去數(shù)字0阵具,也可以實現(xiàn)類型的轉(zhuǎn)換

'1' - 0
1
  1. + X 與方式4類型碍遍,通過+號與X拼接的形式

三.任意類型轉(zhuǎn)Boolean

1.全局方法 Boolean(x)
2.技巧:!! x x的雙重否定還是它自身。
JS中有六個值會被視為false阳液,見我的上一篇文章:JS里的數(shù)據(jù)類型

四.用內(nèi)存圖解釋關(guān)于object的常見問題

用一個比較簡單的方法解釋JS數(shù)據(jù)在內(nèi)存中存儲:
1.JS 引擎將內(nèi)存分為代碼區(qū)和數(shù)據(jù)區(qū)
2.我們只研究數(shù)據(jù)區(qū)
3.數(shù)據(jù)區(qū)分為 Stack(棧內(nèi)存) 和 Heap(堆內(nèi)存)
4.簡單類型的數(shù)據(jù)直接存在 Stack 里
5.復雜類型的數(shù)據(jù)是把 Heap 地址存在 Stack 里
例如:

var a = 1
var b = a
var b = 2
a
1

b變量的變化并不會影響a變量怕敬,因為簡單的數(shù)據(jù)類型會存儲在stack內(nèi)存中。但對于復雜數(shù)據(jù)如object帘皿,當我們聲明一個對象時东跪,其在stack中存儲一個地址,該地址是其在heap中的具體地址鹰溜。簡單地說虽填,就是stack中是該對象的引用。以如下常見的面試題為例:

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 是什么墓陈?
// 'a'

如下關(guān)于變量提示的面試題:

var o = {self:o}
o.self
//undefined

因為上面的代碼相當于如下:

var o 
o = {self:o}
o.self
//undefined

變量o被先聲明了卻沒有賦值恶守,所以為undefined。
6.垃圾回收
如果一個對象在heap中沒有被引用了贡必,就會被瀏覽器當作垃圾兔港,在合適的時間被回收,釋放出該內(nèi)存空間仔拟。但在IE 6瀏覽器中衫樊,會存在垃圾回收的BUG,稱為內(nèi)存泄露理逊。

6.深拷貝與淺拷貝

var a = 1
var b = a
b = 2 //這個時候改變 b

上述代碼中橡伞,a 完全不受 b 的影響,我們就稱之為深拷貝晋被。
1.對于簡單類型的數(shù)據(jù)來說兑徘,賦值就是深拷貝。
2.對于復雜類型的數(shù)據(jù)(對象)來說羡洛,才要區(qū)分淺拷貝和深拷貝挂脑。
如上述JS常見面試題中的一道題:

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

對b進行操作后,a也被改變了欲侮,這種情況就是淺拷貝崭闲。如果對a對象heap內(nèi)存中的數(shù)據(jù)也進行完全拷貝,此時a與b就不會互相影響威蕉,這種情況就是深拷貝刁俭。

(完)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市韧涨,隨后出現(xiàn)的幾起案子牍戚,更是在濱河造成了極大的恐慌侮繁,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件如孝,死亡現(xiàn)場離奇詭異宪哩,居然都是意外死亡,警方通過查閱死者的電腦和手機第晰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門锁孟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人茁瘦,你說我怎么就攤上這事品抽。” “怎么了腹躁?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵桑包,是天一觀的道長。 經(jīng)常有香客問我纺非,道長哑了,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任烧颖,我火速辦了婚禮弱左,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘炕淮。我一直安慰自己拆火,他們只是感情好,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布们镜。 她就那樣靜靜地躺著,像睡著了一般润歉。 火紅的嫁衣襯著肌膚如雪模狭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天踩衩,我揣著相機與錄音嚼鹉,去河邊找鬼。 笑死驱富,一個胖子當著我的面吹牛锚赤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播褐鸥,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼线脚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起酒贬,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤又憨,失蹤者是張志新(化名)和其女友劉穎翠霍,沒想到半個月后锭吨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡寒匙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年零如,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锄弱。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡考蕾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出会宪,到底是詐尸還是另有隱情肖卧,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布掸鹅,位于F島的核電站塞帐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏巍沙。R本人自食惡果不足惜葵姥,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望句携。 院中可真熱鬧榔幸,春花似錦、人聲如沸矮嫉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蠢笋。三九已至拨齐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挺尿,已是汗流浹背奏黑。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留编矾,地道東北人熟史。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像窄俏,于是被迫代替她去往敵國和親蹂匹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

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