JS的數(shù)據(jù)類型

數(shù)據(jù)結(jié)構(gòu)

  • 棧:棧是只允許在一端進(jìn)行插入和刪除操作的線性表,是一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu)答憔。(基本數(shù)據(jù)類型)
    采用數(shù)組的pop()和unshift()方法可以模擬棧的先進(jìn)后出。
  • 隊(duì)列:隊(duì)列是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)。(事件循環(huán)隊(duì)列)
    采用數(shù)組的pop()和push()方法可以模擬棧的先進(jìn)后出躲庄。
  • 堆:堆是基于散列算法的數(shù)據(jù)結(jié)構(gòu)。(引用數(shù)據(jù)類型)

數(shù)據(jù)類型

JS的數(shù)據(jù)類型分為基本數(shù)據(jù)類型和引用數(shù)據(jù)類型钾虐。

基本數(shù)據(jù)類型(采用按值訪問)

  1. 定義:基本數(shù)據(jù)是保存在棧內(nèi)存中的簡(jiǎn)單數(shù)據(jù)段噪窘,它是將類型的值直接保存在棧中的某一個(gè)位置。
  2. 分類:null,undefined倔监,string直砂,boolean,number浩习,symbol
  3. 基本數(shù)據(jù)類型的值是不變的静暂。
    var str = 'hello'
    str.toUpperCase()
    console.log(str) // hello  
    //值未發(fā)生改變
    
  4. number 類型采用IEEE745雙精度的浮點(diǎn)類型
    0.1 + 0.2 !== 0.3 //true
    
  5. null不是對(duì)象類型,是基本數(shù)據(jù)類型
    typeof null  //object
    
    這是JS的一個(gè)bug谱秽,在最開始的時(shí)候洽蛀,JS采用32位系統(tǒng),為了性能考慮疟赊,采用低位存儲(chǔ)數(shù)據(jù)的類型郊供,000開頭代表對(duì)象,null全為0近哟,誤判斷為object驮审。
  6. NaN是基本類型,屬于number
    NaN !== NaN  // true
    
  7. 存儲(chǔ)在棧內(nèi)存中吉执,復(fù)制的是值疯淫,改變其中一個(gè)值對(duì)另一個(gè)沒有影響。
    var a = 1;
    var b = a;
    b = 2;
    console.log(a) // 1
    console.log(b) // 2
    //未改變a的值
    
  8. 聲明一個(gè)變量戳玫,但未初始化熙掺,值為undefined
    let a;
    console.log(a) //undefined
    
  9. 當(dāng)定義一個(gè)變量用來(lái)表示對(duì)象,建議初始化為null
  10. false和true時(shí)區(qū)分大小的咕宿。其中
    false,0,-0,'',null,undefined,NaN類型轉(zhuǎn)換時(shí)轉(zhuǎn)換為false适掰,其他為true。
    
  11. symbol的值是唯一的,并且他不支持new Symbol()
    var symbol1 = Symbol()
    var symbol2 = Symbol()
    console.log(symbol1 === symbol2)  // false
    
  12. null和undefined的區(qū)別
    • null是一個(gè)表示無(wú)的對(duì)象荠列,轉(zhuǎn)換為數(shù)值為0类浪,undefined表示一個(gè)無(wú)的原始值,轉(zhuǎn)換為數(shù)值表示為NaN.
    undefined == null // true (會(huì)進(jìn)行隱式類型轉(zhuǎn)換)
    undefined === null  // false
    
    • null表示此處不應(yīng)該有值肌似,表示一個(gè)對(duì)象被原始的設(shè)置為空值费就;作為函數(shù)的參數(shù),表示該參數(shù)不應(yīng)該是一個(gè)對(duì)象;作為原型鏈的終點(diǎn)川队。
    • undefined力细,表示缺少值。變量聲明未賦值為undefined;數(shù)參數(shù)沒有傳實(shí)參為undefined;對(duì)象屬性沒有賦值為undefined;函數(shù)沒有返回值固额,默認(rèn)return undefined;訪問對(duì)象不存在的屬性為undefined;使用void表達(dá)式求值眠蚂,為undefined.
    void 0 //undefined
    void function f(){} //undefined
    

引用數(shù)據(jù)類型(復(fù)雜數(shù)據(jù)類型,采用引用訪問斗躏。)

  1. 定義:引用類型是在棧內(nèi)存中保存指向堆內(nèi)存中的地址指針逝慧,在堆內(nèi)存中保存具體內(nèi)容的數(shù)據(jù)類型。
  2. 分類:引用類型統(tǒng)稱為Object對(duì)象,具體可分為Object笛臣,Array云稚,Date,RegExp,Function等
  3. 直接賦值引用類型的值是可變的。
    var obj = {
      a: 1
    }
    var obj1 = obj;
    obj1.a = 2
    console.log(obj.a) // 2
    console.log(obj1.a) // 2
    
    引用類型采用棧內(nèi)存存儲(chǔ)指向地址指針沈堡,當(dāng)var obj1 = obj的時(shí)候静陈,其實(shí)賦值的是地址指針,當(dāng)obj1.a=2的時(shí)候诞丽,改變的是地址指針指向的堆內(nèi)存的內(nèi)容鲸拥,因?yàn)閛bj1和obj2的地址指針指向同一堆塊內(nèi)存地址,所以改變一個(gè)僧免,堆內(nèi)存的內(nèi)容也都改變了崩泡。
  4. 堆內(nèi)存進(jìn)行比較是引用比較,比較地址是否一致
    var obj1 = {a: 1}
    var obj2 = {a:1}
    console.log(obj1 === obj2)  // false
    // 每創(chuàng)建一個(gè)對(duì)象其實(shí)都會(huì)創(chuàng)建一個(gè)新的內(nèi)存猬膨,就算內(nèi)容完全一致,地址指針也是不一樣的呛伴。
    
  5. 引用類型的值是保存在堆內(nèi)存中的對(duì)象勃痴。
  6. 引用類型直接賦值,會(huì)互相影響热康,所以采用深拷貝和淺拷貝沛申,(拷貝具體的內(nèi)容,而不是像賦值一樣姐军,只賦值地址指針)在對(duì)新對(duì)象進(jìn)行操作的時(shí)候铁材,便不會(huì)影響原來(lái)的對(duì)象。
    深拷貝及淺拷貝
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末奕锌,一起剝皮案震驚了整個(gè)濱河市著觉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌惊暴,老刑警劉巖饼丘,帶你破解...
    沈念sama閱讀 210,835評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異辽话,居然都是意外死亡肄鸽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門油啤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)典徘,“玉大人,你說(shuō)我怎么就攤上這事益咬〈澹” “怎么了?”我有些...
    開封第一講書人閱讀 156,481評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)汛骂。 經(jīng)常有香客問我罕模,道長(zhǎng),這世上最難降的妖魔是什么帘瞭? 我笑而不...
    開封第一講書人閱讀 56,303評(píng)論 1 282
  • 正文 為了忘掉前任淑掌,我火速辦了婚禮,結(jié)果婚禮上蝶念,老公的妹妹穿的比我還像新娘抛腕。我一直安慰自己,他們只是感情好媒殉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,375評(píng)論 5 384
  • 文/花漫 我一把揭開白布担敌。 她就那樣靜靜地躺著,像睡著了一般廷蓉。 火紅的嫁衣襯著肌膚如雪全封。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,729評(píng)論 1 289
  • 那天桃犬,我揣著相機(jī)與錄音刹悴,去河邊找鬼。 笑死攒暇,一個(gè)胖子當(dāng)著我的面吹牛土匀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播形用,決...
    沈念sama閱讀 38,877評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼就轧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了田度?” 一聲冷哼從身側(cè)響起妒御,我...
    開封第一講書人閱讀 37,633評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎镇饺,沒想到半個(gè)月后携丁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,088評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兰怠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,443評(píng)論 2 326
  • 正文 我和宋清朗相戀三年梦鉴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揭保。...
    茶點(diǎn)故事閱讀 38,563評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肥橙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出秸侣,到底是詐尸還是另有隱情存筏,我是刑警寧澤宠互,帶...
    沈念sama閱讀 34,251評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站椭坚,受9級(jí)特大地震影響予跌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜善茎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,827評(píng)論 3 312
  • 文/蒙蒙 一券册、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧垂涯,春花似錦烁焙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,712評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至操骡,卻和暖如春九火,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背册招。 一陣腳步聲響...
    開封第一講書人閱讀 31,943評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工岔激, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人跨细。 一個(gè)月前我還...
    沈念sama閱讀 46,240評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像河质,于是被迫代替她去往敵國(guó)和親冀惭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,435評(píng)論 2 348