js基本类型和引用类型
基本类型和引用类型
在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


浙公网安备 33010602011771号