1.JS中的類型
-
基本類型
String
Boolean
Number
undefined
Null
Symbol
-
引用類型
Object
對(duì)于基本類型,=代表的是值得拷貝,===代表的是值得比較。
對(duì)于引用類型,=代表的是引用地址的拷貝,===代表的是引用地址的比較。
2.幾個(gè)例子深入理解
- 案例一
let a = 1;
let b = a;
a === b // true
b = 2;
a === 1 ; //true
基本類型Number,賦值為拷貝,當(dāng) b改變的時(shí)候不會(huì)影響到a
- 案例二
let a = {};
let b = {};
let c = a ;
a === b //false
a === c //true
引用類型Object,比較的是引用地址,a和b的引用地址明顯是不同的,所以他們不相等。
c得到了a的引用的地址,因此a===c
- 案例三
let a = {name:'張三',info:{age:11,sex:'男'}};
let b = a;
b.info.age = 22;
a === b //true
a.info.age === 22 //true
因?yàn)?code>a和b指向同一個(gè)地址,所以b做修改的時(shí)候,a同樣修改了。
- 案例四
let a = {name:'張三',info:{age:11,sex:'男'}};
let b = a ; //展開運(yùn)算符淺拷貝
a === b //false
a.name === b.name //true
a.info === b.info //true
因?yàn)檎归_運(yùn)算符是淺拷貝,所以兩個(gè)對(duì)象指向不同的地址,即a!==b。
但是淺拷貝畢竟是淺拷貝。
name是基本類型,拷貝的值,所以相同。
info為引用類型,拷貝的地址,也相同。
- 案例五
let a = {name:'張三',info:{age:11,sex:'男'}};
let b = JSON.parse(JSON.stringify) ; //深拷貝
a === b //false
a.name === b.name //true
a.info === b.info //false
a.info.age === b.info.age//true
深拷貝了,其他的不用說。
因?yàn)樯羁截愡^了,info指向的就是各自的地址了,沒啥關(guān)系了。
但是基本類型該相同相同。