原始类型和引用类型的区别


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 ]
      
    • 总结:原始类型作为参数,函数内部操作不影响实参的值。引用类型作为参数,函数内的操作会影响实参的值。