1、內存空間:spa
爲了便於理解,咱們暫且先將Js的內存分爲棧內存和堆內存。3d
JavaScript具備垃圾自動回收機制,內存的分配與回收都徹底實現了自動管理。因此咱們在開發時通常會忽視內存空間的問題。可是理解了內存空間,將會對JS理解更加深入,認識也更加清晰。指針
JavaScript有自動垃圾收集機制,那麼這個自動垃圾收集機制的原理是什麼呢?其實很簡單,就是找出那些再也不繼續使用的值,而後釋放其佔用的內存。垃圾收集器會每隔固定的時間段就執行一次釋放操做。code
內存的生命週期:分配內存,使用內存,釋放內存對象
2、數據類型:blog
5種基本數據類型:生命週期
Number,Boolean,String,Undefined,Nullip
基本類型是不可變的!任何方法都沒法改變一個基本類型的值。內存
var name = 'jozo'; name.toUpperCase(); // 輸出 'JOZO' console.log(name); // 輸出 'jozo'
也不能夠給基本類型添加屬性或者方法。ci
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'};
3、數據比較:
一、對於基本類型,==和===是有區別的
1)不一樣類型(如Number和String)間比較,==之間比較,先轉化成同一類型,看「值」是否相等,===若是類型不一樣,其結果就是不等
2)同類型比較,直接進行「值」比較
二、對於引用類型,==和===是沒有區別的
進行「指針地址」比較
三、基本類型與引用類型比較,==和===是有區別的
1)對於==,將高級轉化爲基礎類型,進行「值」比較
2)由於類型不一樣,===結果爲false
4、賦值:
基本類型賦值後兩個變量互不影響
var a = 10;
var b = a;
引用類型的賦值是地址的複製,因此兩個變量指向的仍是同一個對象,對任何一個的操做都會相互的影響。
var a = {};
var b = a;