引用類型--KO

js數(shù)據(jù)類型

在javascript中數(shù)據(jù)類型分兩大類:
基本類型(值類型):number、boolean、String、undefined、null
引用類型:object、Array

區(qū)別是什么

沒有什么比代碼更有說服力了,舉個(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ì)改變原來的變量,把引用類型賦值給變量時(shí),變量本身改變了原來的變量也會(huì)變。這是因?yàn)椋绢愋驮谫x值的時(shí)候是保存的值,引用類型在賦值的時(shí)候是保存的引用。當(dāng)復(fù)制保存著某個(gè)對象的變量時(shí),操作的是對象的引用,但在為對象添加屬性的時(shí)候操作的是實(shí)際的對象,可以看一道面試題:

var a = {x : 1};
var b = a;
a.a = a = {x : 2};
console.log(a.a); // undefined
console.log(b.a); // {x : 2}

第一行和第二行執(zhí)行完之后:

  1. 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的值,掌握了原理之后一切都變得明了啦!

如何判斷對象的類型

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

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

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