WEB前端学习五 js什么是引用类型
js中的數(shù)據(jù)類型有以下幾種:
Number ? Boolean ? undefined ? ? Object ? Function ? ?String ?Null
基本類型:Number Boolean ?String ?undefined null
引用類型:Object ?Function
基本類型的數(shù)據(jù)是存放在棧內(nèi)存中的,而引用類型的數(shù)據(jù)是存放在堆內(nèi)存中的
復(fù)制變量值
基本類型:
var p = 1;var p1 = p;執(zhí)行結(jié)果:
也就是說,基本類型的復(fù)制就是在棧內(nèi)存中開辟出了一個新的存儲區(qū)域用來存儲新的變量,這個變量有它自己的值,只不過和前面的值一樣,所以如果其中一個的值改變,則不會影響到另一個。
引用類型:
var object1 = new Object(); var object2 = object1;object2復(fù)制了object1的值,但是結(jié)果卻不是像基本類型復(fù)制一樣的
執(zhí)行結(jié)果:
定義了一個對象其實是在棧內(nèi)存中存儲了一個指針,這個指針指向堆內(nèi)存中該對象的存儲地址。復(fù)制給另一個對象的過程其實是把該對象的地址復(fù)制給了另一個對象變量,兩個指針都指向同一個對象,所以若其中一個修改了,則另一個也會改變。
object.name = 'jhon'; alert(object.name); //jhon?
基本類型的數(shù)據(jù)是沒有屬性和方法的,引用類型才會有,但是為什么String類型卻又那么多方法呢?
var string = "aaa"; var string2 = string.substring(0)); //aaa基本類型的確沒有方法和屬性,因為一旦創(chuàng)建了屬性或者方法就會被立刻銷毀,但是為了方便程序員對這類的基本類型數(shù)據(jù)比較方便的操作,在底層做了一些工作,其實這段代碼相當(dāng)于:
var string = new String("aaa"); var string2 = string.substring(0); string = null;(1)創(chuàng)建一個String類型的實例(使用?new?操作符創(chuàng)建的引用類型的實例,在執(zhí)行流離開當(dāng)前作用域之前都一直保存在內(nèi)存中。而自動創(chuàng)建的基本包裝類型的對象,則只存在于一
行代碼的執(zhí)行瞬間,然后立即被銷毀 )
(2)在實例上調(diào)用指定方法
(3)銷毀該實例
經(jīng)過這三步,字符串值就變得和對象一樣了,在Boolean ?Number中也是這樣
String ?Boolean ?Number 這三種類型也叫做 ?基本包裝類型
總結(jié)
以上是生活随笔為你收集整理的WEB前端学习五 js什么是引用类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WEB前端学习四 js什么是原始类型
- 下一篇: 2017年html5行业报告,云适配发布