JS基本類型和引用類型

JS中可以把變量分成兩部分,基本類型和引用類型。

JavaScript值類型和引用類型有哪些
(1)值類型:數(shù)值、布爾值、null、undefined。
(2)引用類型:對(duì)象、數(shù)組、函數(shù)。

如何理解值類型和引用類型及舉例
我們可以用“連鎖店”和“連鎖店鑰匙”來理解,不知道以下比喻合不合適,-。
(1)值類型理解:變量的交換等于在一個(gè)新的地方按照連鎖店的規(guī)范標(biāo)準(zhǔn)(統(tǒng)一店面理解為相同的變量?jī)?nèi)容)新開一個(gè)分店,這樣新開的店與其它舊店互不相關(guān)、各自運(yùn)營(yíng)。
【值類型例子】
代碼如下:

function chainStore() 
{ 
var store1='Nike China'; 
var store2=store1; 
store1='Nike U.S.A.'; 
alert(store2); //Nike China 
} 
chainStore(); 

//把一個(gè)值類型(也可以叫基本類型)store2傳遞給另一個(gè)變量(賦值)時(shí),其實(shí)是分配了一塊新的內(nèi)存空間,因此改變store1的值對(duì)store2沒有任何影響,因?yàn)樗幌褚妙愋?,變量的交換其實(shí)是交換了指像同一個(gè)內(nèi)容的地址。
(2)引用類型理解:變量的交換等于把現(xiàn)有一間店的鑰匙(變量引用地址)復(fù)制一把給了另外一個(gè)老板,此時(shí)兩個(gè)老板同時(shí)管理一間店,兩個(gè)老板的行為都有可能對(duì)一間店的運(yùn)營(yíng)造成影響。
【引用類型例子】
代碼如下:

function chainStore() 
{ 
var store1=['Nike China']; 
var store2=store1; 
alert(store2[0]); //Nike China 
store1[0]='Nike U.S.A.'; 
alert(store2[0]); //Nike U.S.A. 
} 
chainStore(); 

//在上面的代碼中,store2只進(jìn)行了一次賦值,理論上它的值已定,但后面通過改寫store1的值,發(fā)現(xiàn)store2的值也發(fā)生了改變,這正是引用類型的特征,也是我們要注意的地方。

引用類型值的一些問題:
1、動(dòng)態(tài)屬性。
JS中對(duì)象的屬性可以動(dòng)態(tài)的添加并且賦值的,比如:

var obj = new Object();

obj.name = 'zjzhome';

console.log(obj.name) //zjzhome

但是基本類型不可以添加屬性,雖然這樣做不報(bào)錯(cuò)。
2、復(fù)制值
引用類型復(fù)制和簡(jiǎn)單類型不同,復(fù)制完成后新值和之前的值都是引用的同一個(gè)對(duì)象,所以之前的值改變,也會(huì)影響復(fù)制后的值,看個(gè)例子:

var obj1 = new Object()

obj1.name = 'zjzhome'

var obj2 = obj1

console.log(obj2.name); //zjzhome

obj1.name = 'zjz'

console.log(obj2.name) //zjz
image.png

3、函數(shù)傳參
JS中所有函數(shù)傳參都是按值傳遞的。

function setName(obj) { 
    obj.name = 'zjzhome'
}

var person = new Object()

setName(person)

console.log(person.name) //zjzhome 

看了上面的例子可能會(huì)覺得對(duì)象是按引用傳遞的,我們把例子修改一下:

function setName(obj) { 
    obj.name = 'zjzhome'; 
    obj = new Object();
    obj.name = 'zjz' 
}

var person = new Object()

setName(person)

console.log(person.name) // zjzhome 

person的值并沒有因?yàn)閛bj的修改而改變,說明不是按引用傳遞的。如果是按引用傳遞的,obj和person指向同一個(gè)對(duì)象,當(dāng)obj改變,person也會(huì)改變。

4、類型檢測(cè)
typeof用于檢測(cè)簡(jiǎn)單類型,對(duì)于對(duì)象,我們更想知道的是什么類型的對(duì)象。所以引進(jìn)了instanceof操作符。
person instanceof Object 這樣來檢測(cè)person是不是Object。
person instanceof Array 這樣來檢測(cè)person是不是Array。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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