基本數(shù)據(jù)類型和對象數(shù)據(jù)類型的區(qū)別

JavaScript中的數(shù)據(jù)類型一共有7中,分別是Number,Boolean,String,Null,Undefined,Symbol和Object?;緮?shù)據(jù)類型包含Number,Boolean,String,Null,Undefined以及Symbol。

基本數(shù)據(jù)類型與對象數(shù)據(jù)類型(Object)的區(qū)別在哪里呢?

  • 首先,基本數(shù)據(jù)類型的值不可改變,對象數(shù)據(jù)類型的值可以改變

其實當時看完這句話,我的內(nèi)心是拒絕的,因為你看:

let number = 111;

number = 222;

console.log(number);

輸出不就是222嗎?

其實這樣改變的并不是基本數(shù)據(jù)類型的值,而是一個變量的值。在存儲區(qū)域中,111和222的地址是不會變的。

  • 其次,基本數(shù)據(jù)類型存儲的是值,而對象數(shù)據(jù)類型存儲的是指針

什么是指針(地址),嗯……對于學習過C/C++的人應(yīng)該知道,有靜態(tài)存儲區(qū)和動態(tài)存儲區(qū),對于基本數(shù)據(jù)類型,它們都是存儲在靜態(tài)存儲區(qū)的,它們有固定的地址,例如字符'a'在內(nèi)存中就有固定的地址。而對于對象數(shù)據(jù)類型,它們存儲的是指針,指針的作用就是存儲你所想要訪問數(shù)據(jù)的地址,畫圖來說大概就是這樣:

http://ww1.sinaimg.cn/large/005Vjb0Sly1g9qqdp4xpzj30vf08xt8m.jpg)

所以,當我們對基本數(shù)據(jù)類型進行操作時:

let a=1;

let b = a;

b = 2;

console.log(a);

輸出的a還是1,因為它不會因為b的值發(fā)生變化而受到影響。

如果是對象數(shù)據(jù)類型:

let c = [];

let d = c;

d.push(1);

console.log(c);

輸出的結(jié)果就是[1]。

  • 再次,基本數(shù)據(jù)類型的比較是值的比較,對象數(shù)據(jù)類型的比較是地址的比較。

這個有了上面的例子,就比較好理解。因為對象是以地址來訪問的,所以當我們比較的時候,其實比較的是內(nèi)部的地址是否相同,而對于基本數(shù)據(jù)類型的比較,則是對于值是否相同來比較的。

總結(jié)一下,可以得出下表結(jié)論:

類型 基本數(shù)據(jù)類型 對象數(shù)據(jù)類型
無法改變 可以改變
屬性和方法 無法添加 可以添加
存儲值 指針(地址)
比較 值的比較 地址的比較
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容