一、內存空間:
為了便於理解,我們暫且先將Js的內存分為棧內存和堆內存。
JavaScript具有垃圾自動回收機制,內存的分配與回收都完全實現了自動管理。所以我們在開發時一般會忽視內存空間的問題。但是理解了內存空間,將會對JS理解更加深刻,認識也更加清晰。
JavaScript有自動垃圾收集機制,那么這個自動垃圾收集機制的原理是什么呢?其實很簡單,就是找出那些不再繼續使用的值,然后釋放其占用的內存。垃圾收集器會每隔固定的時間段就執行一次釋放操作。
內存的生命周期:分配內存,使用內存,釋放內存
二、數據類型:
5種基本數據類型:
Number,Boolean,String,Undefined,Null
基本類型是不可變的!任何方法都無法改變一個基本類型的值。
var name = 'jozo'; name.toUpperCase(); // 輸出 'JOZO' console.log(name); // 輸出 'jozo'
也不可以給基本類型添加屬性或者方法。
var person = 'jozo'; person.age = 22; person.method = function(){//...}; console.log(person.age); // undefined console.log(person.method); // undefined
基本數據類型存放於棧內存。包括變量標識符和變量的值。
var name = 'jozo'; var city = 'guangzhou'; var age = 22;
引用數據類型:
Object,Array
可以為引用類型添加屬性和方法,也可以刪除其屬性和方法(delete person.name)。
引用類型的存儲需要內存的棧區和堆區共同完成,棧區內存保存變量標識符和指向堆內存中該對象的指針,也可以說是該對象在堆內存的地址,而堆內存中存儲這個對象。
var person1 = {name:'jozo'}; var person2 = {name:'xiaom'}; var person3 = {name:'xiaoq'};
三、數據比較:
1、對於基本類型,==和===是有區別的
1)不同類型(如Number和String)間比較,==之間比較,先轉化成同一類型,看“值”是否相等,===如果類型不同,其結果就是不等
2)同類型比較,直接進行“值”比較
2、對於引用類型,==和===是沒有區別的
進行“指針地址”比較
3、基本類型與引用類型比較,==和===是有區別的
1)對於==,將高級轉化為基礎類型,進行“值”比較
2)因為類型不同,===結果為false
四、賦值:
基本類型賦值后兩個變量互不影響
var a = 10;
var b = a;
引用類型的賦值是地址的復制,所以兩個變量指向的還是同一個對象,對任何一個的操作都會相互的影響。
var a = {};
var b = a;