[JS中的六大數(shù)據(jù)類型]
js中有六種數(shù)據(jù)類型僚祷,包括五種基本數(shù)據(jù)類型(Number,String,Boolean,Undefined,Null),和一種復(fù)雜數(shù)據(jù)類型(Object)辙谜。
typeof 關(guān)鍵字是用來檢測當(dāng)前變量的數(shù)據(jù)類型的方法
typeof null //Object
typeof { } //Object
typeof [ ] //Object
typeof console.log() //Function
null類型進(jìn)行typeof操作符后装哆,結(jié)果是object,原因在于定嗓,null類型被當(dāng)做一個空對象引用。
1.Object類型
object類型分為3種
1凌简,對象
2恃逻,數(shù)組
3,函數(shù)
關(guān)于對象可以有兩種創(chuàng)建方式凸郑。
第一種
var person = new Object();
person.age = 18;
第二種方式是使用對象字面量表示法矛市,如下所示
var person = {
age : 18
};
2.Array類型
數(shù)組類型
創(chuàng)建數(shù)組的基本方式有兩種
第一種是使用Array構(gòu)造函數(shù)
var colors = new Array("red","blue","yellow");
第二種是使用數(shù)組字面量
var colors = ["red","blue","yellow"];
3 Function類型
函數(shù)類型
function sum(num1,num2){
return num1 + num2;//結(jié)果返回給sun變量了
};
也就是說,js按照存儲方式分為值類型和引用類型救氯。那么他們的計算有什么區(qū)別呢配紫?
題目1:
var a = 100;
var b = a;
a = 200;
console.log (b);
題目2:
var a = {age : 20};
var b = a;
b.age = 21;
console.log (a.age);
題目1的答案是 100躺孝,題目2的答案是21底桂,
題目1是簡單的值類型,在從一個變量向另一個變量賦值基本類型時于个,會在該變量上創(chuàng)建一個新值暮顺,然后把新值賦給被賦值變量的新地址空間上。
此時羽氮,a中保存的值為 100 惫恼,當(dāng)使用 a 來初始化 b 時,b 中保存的值也為100令宿,但b中的100與a中的是完全獨立的腕窥,該值只是a中的值的一個副本,此后簇爆,
這兩個變量可以參加任何操作而相互不受影響。
題目2是引用類型拦惋,當(dāng)從一個變量向另一個變量賦值引用類型的值時安寺,同樣也會將存儲在變量中的對象的值復(fù)制一份放到為新變量分配的空間中。
這時保存在變量中的是對象在堆內(nèi)存中的地址言秸,所以,與簡單賦值不同举畸,這個值的副本實際上是一個指針,而這個指針指向存儲在堆內(nèi)存的一個對象跋核。那么賦值操作后,
兩個變量都保存了同一個對象地址砂代,則這兩個變量指向了同一個對象率挣。因此,改變其中任何一個變量捶箱,都會相互影響动漾。
因此,引用類型的賦值其實是對象保存在棧區(qū)地址指針的賦值谦炬,因此兩個變量指向同一個對象,任何的操作都會相互影響础爬。