04. JavaScript基礎(chǔ)——原始值和引用值

定義

  1. 原始值
    1. primitive value,就是最簡(jiǎn)單的數(shù)據(jù)
    2. Undefined,Null,Boolean,Number,String,Symbol都是原始值
    3. 保存原始值的變量是按值訪問的,因?yàn)槲覀儾僮鞯氖谴鎯?chǔ)在變量中的實(shí)際值
  2. 引用值
    1. reference value,由多個(gè)值構(gòu)成的對(duì)象
    2. JS不能直接訪問內(nèi)存位置,所以不能直接操作對(duì)象所在的內(nèi)存空間
    3. 在操作對(duì)象的時(shí)候,實(shí)際上操作的是對(duì)該對(duì)象的引用,所以保存引用值的變量是按引用訪問的
  3. 在把一個(gè)值賦給變量的時(shí)候,JS的引擎必須確定這個(gè)值是原始值還是引用值

動(dòng)態(tài)屬性

  1. 對(duì)于引用值,在變量保存了某個(gè)值之后,可以隨時(shí)添加,修改,刪除其屬性和方法

    let person = new Object();
    person.name = "小明";
    console.log(person);  // {name: '小明'}
    
  2. 原始值不能有屬性,但是給原始值添加屬性不會(huì)報(bào)錯(cuò),會(huì)返回undefined

  3. 原始類型的初始化可以只使用原始字面量形式,如果使用了new關(guān)鍵字,那么JS會(huì)創(chuàng)建一個(gè)Object類型的實(shí)例

    let name1 = "小明";
    let name2 = new String("小剛");
    name1.age = 18;
    name2.age = 19;
    console.log(name1.age);  // undefined
    console.log(name2.age);  // 19
    console.log(typeof name1);  // string
    console.log(typeof name2);  // object
    

復(fù)制值

  1. 在通過變量把一個(gè)原始值賦值到另一個(gè)變量的時(shí)候,原始值會(huì)被復(fù)制到新變量的位置

    let n1 = 5;
    let n2 = n1;
    
    • 此時(shí),n2會(huì)得到數(shù)值5,這個(gè)數(shù)字和存儲(chǔ)在n1中的5是互相獨(dú)立的,互不干擾
  2. 在把引用值從一個(gè)變量賦給另一個(gè)變量的時(shí)候

    1. 存儲(chǔ)在變量中的值也會(huì)被復(fù)制到新變量所在的位置,但是這里復(fù)制的值實(shí)際上是一個(gè)指針,它指向了存儲(chǔ)在堆內(nèi)存中的對(duì)象

    2. 復(fù)制完成之后,兩個(gè)變量實(shí)際上指向同一個(gè)對(duì)象,所以一個(gè)對(duì)象上的變化會(huì)在另一個(gè)對(duì)象上反映出來

      let obj1 = new Object();
      obj1.name = "小明";
      let obj2 = obj1;
      console.log(obj2.name); // 小明
      

確定類型

  1. typeof對(duì)引用值的用處不大,當(dāng)需要知道一個(gè)值是什么類型的時(shí)候,可以還有instanceof操作符

  2. 語法格式:result = variable instanceof constructor

    1. 如果變量是給定的引用類型的實(shí)例,就返回true
  3. 例子

    let person = new Object();
    person.name = "小明";
    console.log(person instanceof Object);  // 返回true
    console.log(person instanceof Array);  // 返回false
    
  4. 所有引用值都是Object的實(shí)例,所以使用instanceof檢測(cè)任何引用值和Object構(gòu)造函數(shù)都會(huì)返回true

  5. 如果用instanceof檢測(cè)原始值,那么會(huì)返回false,因?yàn)樵贾挡皇菍?duì)象

?著作權(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)容