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