一、內(nèi)存空間
為了便于理解凛捏,我們暫且先將Js的內(nèi)存分為棧內(nèi)存和堆內(nèi)存担忧。
JavaScript具有垃圾自動(dòng)回收機(jī)制,內(nèi)存的分配與回收都完全實(shí)現(xiàn)了自動(dòng)管理坯癣。所以我們?cè)陂_發(fā)時(shí)一般會(huì)忽視內(nèi)存空間的問題瓶盛。但是理解了內(nèi)存空間,將會(huì)對(duì)JS理解更加深刻,認(rèn)識(shí)也更加清晰惩猫。
JavaScript有自動(dòng)垃圾收集機(jī)制芝硬,那么這個(gè)自動(dòng)垃圾收集機(jī)制的原理是什么呢?其實(shí)很簡(jiǎn)單轧房,就是找出那些不再繼續(xù)使用的值拌阴,然后釋放其占用的內(nèi)存。垃圾收集器會(huì)每隔固定的時(shí)間段就執(zhí)行一次釋放操作奶镶。
內(nèi)存的生命周期:分配內(nèi)存迟赃,使用內(nèi)存,釋放內(nèi)存
二厂镇、數(shù)據(jù)類型
js中的數(shù)據(jù)類型: Function纤壁,Undefined,String捺信,Boolean酌媒,Null , Number
5種基本數(shù)據(jù)類型: Undefined迄靠,String秒咨,Boolean,Null 掌挚, Number
簡(jiǎn)單記憶方式:
基本數(shù)據(jù)類型 => usbnb(最后一個(gè)b的Number)
數(shù)據(jù)類型 => fusbnb
基本類型是不可變的雨席!任何方法都無法改變一個(gè)基本類型的值。也不可以給基本類型添加屬性或者方法疫诽。但是可以給obj或者數(shù)組添加新的方法舅世。
var person = 'datura';
person.age = 18;
person.method = function(){//...};
console.log(person.age); // undefined
console.log(person.method); // undefined
基本數(shù)據(jù)類型存放于棧內(nèi)存。包括變量標(biāo)識(shí)符和變量的值奇徒。
var name = 'datura';
var job= '搬磚的';
var age = 18;
引用數(shù)據(jù)類型:Object,Array
可以為引用類型添加屬性和方法摩钙,也可以刪除其屬性和方法(delete person.name)罢低。
引用類型的存儲(chǔ)需要內(nèi)存的棧區(qū)和堆區(qū)共同完成,棧區(qū)內(nèi)存保存變量標(biāo)識(shí)符和指向堆內(nèi)存中該對(duì)象的指針胖笛,也可以說是該對(duì)象在堆內(nèi)存的地址网持,而堆內(nèi)存中存儲(chǔ)這個(gè)對(duì)象。
var person1 = {name:'datura'};
var person2 = {name:'blue'};
var person3 = {name:'green'};
三长踊、數(shù)據(jù)比較
1功舀、對(duì)于基本類型,==和===是有區(qū)別的
1)不同類型(如Number和String)間比較身弊,==之間比較辟汰,先轉(zhuǎn)化成同一類型列敲,看“值”是否相等,===如果類型不同帖汞,其結(jié)果就是不等
2)同類型比較戴而,直接進(jìn)行“值”比較
2、對(duì)于引用類型翩蘸,==和===是沒有區(qū)別的
都是進(jìn)行“指針地址”比較
3所意、基本類型與引用類型比較,==和===是有區(qū)別的
1)對(duì)于==催首,將高級(jí)轉(zhuǎn)化為基礎(chǔ)類型扶踊,進(jìn)行“值”比較
2)因?yàn)轭愋筒煌?==結(jié)果為false
四、賦值
基本類型賦值后兩個(gè)變量互不影響
var a = 10;
var b = a;
引用類型的賦值是地址的復(fù)制郎任,所以兩個(gè)變量指向的還是同一個(gè)對(duì)象姻檀,對(duì)任何一個(gè)的操作都會(huì)相互的影響。
var a = {};
var b = a;