原始型別和引用型別的區別
阿新 • • 發佈:2022-03-17
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 ]
-
總結:原始型別作為引數,函式內部操作不影響實參的值。引用型別作為引數,函式內的操作會影響實參的值。
-