js基本型別和引用型別
阿新 • • 發佈:2020-11-01
基本型別和引用型別
在mdn中,js資料型別被分為原始型別和物件型別,也叫基本型別和引用型別。
具體的基本型別和引用型別可以檢視mdn:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Data_structures
基本型別
1.基本型別值不可變
基本型別的變數存放在棧區,值不可變。不過這裡的值不可變說的是不能使用方法改變值,直接再次賦值顯然能夠改變值的。
let name='zhangsan'; console.log(typeof(name));//string parseInt(name); console.log(typeof(name));//string name=true; console.log(typeof(name));//true
2.基本型別的變數賦值
基本型別的變數賦值時,會在棧區建立一個新值,賦值與被賦值的變數進行任何操作都不會影響對方。
let nameA='zhangsan'; let nameB=nameA; console.log(nameB);//zhangsan nameB='lisi'; console.log(nameA);//zhangsan console.log(nameB);//lisi
引用型別
1.引用型別值可變
引用型別的值存放在堆疊區,值可變是指可以使用方法改變。
let person={ name:'zhangsan', age:18 }; console.log(person);//{ name: 'zhangsan', age: 18 } person.name='lisi'; person.age=20; console.log(person);//{ name: 'lisi', age: 20 }
2.引用型別的變數賦值
引用型別的變數賦值時,也會在棧區建立一個新值,但是這裡的棧區儲存的值是指向堆區的指標,也就是變數賦值後,棧區的值不同,但是都指向堆區的相同內容,賦值與被賦值的變數進行任何操作都會影響對方。
let personA={ name:'zhangsan', age:18 }; let personB=personA; console.log(personA);//{ name: 'zhangsan', age: 18 } personB.name='lisi'; personB.age=20; console.log(personA);//{ name: 'lisi', age: 20 } console.log(personB);//{ name: 'lisi', age: 20 }
兩種型別堆疊區變化
初始化
let a=1; let b=1; console.log(a===b);//true let personA={}; let personB={}; console.log(personA===personB);//false
a和b在棧區值都是1,所以
a===b
為true
。personA和personB堆區值相同,但是指向堆區的棧區值為堆記憶體地址a和堆記憶體地址b,所以personA===personB
為false
。
賦值
let a=1; let b=a; console.log(a===b);//true let personA={}; let personB=personA; console.log(personA===personB);//true
a賦值給b,a和b在棧區值都是1,所以
a===b
為true