js數(shù)據(jù)類型
在javascript中數(shù)據(jù)類型分兩大類:
基本類型(值類型):number、boolean煞额、String思恐、undefined、null
引用類型:object膊毁、Array
區(qū)別是什么
沒(méi)有什么比代碼更有說(shuō)服力了胀莹,舉個(gè)例子:
var a = 1;
var b = a;
b = 0;
var c = [ ];
var d = c;
d[1] = 'a';
b // 0
a // 1
d // [empty, "a"]
c // [empty, "a"]
把基本類型賦值給變量時(shí),變量本身改變不會(huì)改變?cè)瓉?lái)的變量婚温,把引用類型賦值給變量時(shí)描焰,變量本身改變了原來(lái)的變量也會(huì)變。這是因?yàn)椋绢愋驮谫x值的時(shí)候是保存的值荆秦,引用類型在賦值的時(shí)候是保存的引用篱竭。當(dāng)復(fù)制保存著某個(gè)對(duì)象的變量時(shí),操作的是對(duì)象的引用步绸,但在為對(duì)象添加屬性的時(shí)候操作的是實(shí)際的對(duì)象掺逼,可以看一道面試題:
var a = {x : 1};
var b = a;
a.a = a = {x : 2};
console.log(a.a); // undefined
console.log(b.a); // {x : 2}
第一行和第二行執(zhí)行完之后:
- a 和 b都指向{x:1}這塊內(nèi)存
第三行代碼相當(dāng)于:
a.a = a ;
a = {x: 2};
a.a = a執(zhí)行之后:
a.a = { x : 1 }
a = { x : 1 , a: { x : 2 } };
b = { x : 1 , a: { x : 2 } };
a = {x: 2};執(zhí)行之后:
a = { x : 2 };
b = { x : 1 , a: { x : 2 } };
所以不難看出a.a的值和b.a的值,掌握了原理之后一切都變得明了啦瓤介!
如何判斷對(duì)象的類型
- typeof obj
適用于基本類型 - obj instanceof Object
適用于引用類型的弱檢查 - Object.prototype.toString.call(obj)
適用于引用類型的強(qiáng)檢查