javascript原始值和引用值类型及区别
2021/12/27 11:08:47
本文主要是介绍javascript原始值和引用值类型及区别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
原始值和引用值类型及区别
首先,原始值和引用值类型都是js中的数据类型,为了充分利用存储空间,定义了不同的数据类型,而且js是弱类型,动态语言,数据类型可变。
原始值(简单数据类型)
存储在栈中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。包含五种:undefined,null,boolean,number和string,可以通过typeof来判断某数据是何简单数据类型。
引用值(复杂数据类型)
存储在堆中的对象,放在变量的栈空间中的值是该对象存储在堆中的地址,也就是说,存储在变量处的值是一个指针(内存地址),指向存储对象的堆内存中,包含Object,array,function等
区别:1.简单数据类型的值是储存在栈中,当把一个变量传递给另一个变量时,是把一个栈中的东西复制到另一个栈中,并且这两个变量互不影响,修改其中的变量值时不会改变另一个变量的结果。
var a=10 var b=a a=1 console.log(b)//10
2.引用值是把引用变量的名称存储在栈中,但是把实际对象存储在堆中,栈中的内存地址指向堆中的实际对象,当把引用对象传递给另一个变量时,复制的其实是指向实际对象的指针(内存地址),此时两者指向的是同一个数据,若通过方法改变其中一个变量的值,则另一个变量的值也会改变,因此,js中对象的复制是默认引用赋值的。
const obj1={ name:'xiaoming' } const obj2=obj1 obj2.name='xiaohong' console.log(obj1)//xiaohong
也是因为上述特点,es6中,const是声明常量的,赋值后,该值不可改变。
const PI=3.14 PI=2.14//报错 console.log(PI) //但是 const obj1={ name:'xiaoMing' } obj1.name='xiaoHong' console.log(obj1.name)//xiaoHong
这也是因为,const声明的obj1指向的是栈中的内存地址,此地址不可被修改,但是堆中存储的数据它是管不着的。
小明的妈妈让小明看门,家里的东西被偷光了,门还在。
如果你想复制赋值,另外一个值不会随它改变而改变,则必须重新分配对象,此时,该值的原指针(内存地址)改变,则另外一个值不会随它的改变而改变。
var obj1={ name:'xiaoMing' } var obj2=Object.assign({},obj1) obj2.name='xiaoHong' console.log(obj1) console.log(obj2)
这篇关于javascript原始值和引用值类型及区别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-01后台管理开发学习:新手入门指南
- 2024-11-01后台管理系统开发学习:新手入门教程
- 2024-11-01后台开发学习:从入门到实践的简单教程
- 2024-11-01后台综合解决方案学习:从入门到初级实战教程
- 2024-11-01接口模块封装学习入门教程
- 2024-11-01请求动作封装学习:新手入门教程
- 2024-11-01登录鉴权入门:新手必读指南
- 2024-11-01动态面包屑入门:轻松掌握导航设计技巧
- 2024-11-01动态权限入门:新手必读指南
- 2024-11-01动态主题处理入门:新手必读指南