1. 程式人生 > 其它 >原始型別和引用型別的區別

原始型別和引用型別的區別

JavaScript

(1)原始型別和引用型別的區別;

原始型別賦值:

 let str1 = 'hello';
 let str2 = str1;
 str1 = 'world'
 console.log(str1);
 console.log(str2)
world
hello     

引用型別賦值

let stu1 = {name:'xiaoming'};
 let stu2 = stu1;
 stu1.name = 'zhangsan';
 console.log(stu1.name);
 console.log(stu2.name)
zhangsan    
zhangsan   

原始型別與引用型別三種情況下的對比:

  • 賦值:

    • 原始型別賦的是
    • 引用型別賦的是 引用物件
  • 比較

    • 原始型別:

      let name1 = 'wpx';
       let name2 = 'wpx';
       console.log(name1 === name2);//true
      
    • 引用型別

      let person1 = {name:'wpx'};
       let  person2  = {name: 'wpx'};
       let person3 = person1;
       console.log(person1 === person2)//false
       console.log(person3 === person1)//true
      
  • 解釋:在原始型別上,兩個變數所比較的是值,就如程式碼所示,name1 的值是'wpx' 而 name2也等於'wpx',兩個值是全等的,所以他們相比較會等於ture.

    而在引用型別上,person1與person2指向的是兩個不同的物件,所以相比較結果會是false。當person3賦值為person1時,person3指向的物件與person1相同(同一個),所以相比較會是true。

  • 總結:原始型別比較的是值是否相等;引用型別比較的是“引用”物件是否是同一個;

  • 函式傳參:

    • 原始型別:

       function fun(num){
        num = 100;
       }
       let n = 10;
      fun(n);
       console.log(n);//10,因為num作為函式內部值,不影響外部
      
    • 引用型別:

       function fun(arr){
        arr.push(10);
       }
       let a = [1,2,3,4];
      fun(a);
       console.log(a)//[ 1, 2, 3, 4, 10 ]
      
    • 總結:原始型別作為引數,函式內部操作不影響實參的值。引用型別作為引數,函式內的操作會影響實參的值。