全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JavaScript 值类型和引用类型的初次研究(推荐)

值类型:也称为原始数据或原始值(primitive value)。

这类值存储在栈(stack)中,栈是内存中一种特殊的数据结构,也称为线性表,栈按照后进先出的原则存储数据,先进入的数据被压入栈底,最后插入(push)的数据放在栈顶,需要读取数据时从栈顶开始弹出(pop)数据,即最后一个数据被第一个读出来。因此说,值类型都是简单的数据段。变量的位置和变量值的位置是重叠的,也就是说值类型的数据被存储在变量被访问的位置。

引用类型:这类值存储在堆(heap)中,堆是内存中的动态区域,相当于自留空间,在程序运行期间会动态分配给代码和堆栈。

堆中存储的一般都是对象,然后通过一个编号传递给栈内变量,这个编号就是所谓的引用指针(point),这样变量和变量值之间是分离的,它们通过指针相联系。当读写数据时,计算机通过变量的指针找到堆中的数据块,并进行操作。

今天遇到一个坑,具体的不多说,直接上代码

var a = [ [],[],[1,2,3] ]
var b = ['颜色','大小','尺寸']
var arr = []
for(let i = 0; i < a.length; i ++){
  let obj = {}
  for(let j = 0; j < a[i].length; j ++){
    obj[b[i]] = a[i][j]
    arr.push(obj)
    console.log(arr)
    console.log(obj)
  }

}
console.log(arr)

我预期的 arr 的结果应该是

[ { '尺寸': 1 }, { '尺寸': 2 }, { '尺寸': 3 } ]

最后arr的结果居然是这样的

[ { '尺寸': 3 }, { '尺寸': 3 }, { '尺寸': 3 } ]

在一个基友群里问,最后终于自己得出结论了——这是因为值类型和引用类型不同的原因。

在JavaScript里的值大概分为两种,一种是值类型,一种是引用类型。

值类型:数值、布尔值、null、undefined

引用类型:对象、数组、函数

我们例子中的obj虽然每次打印出来都是不同的,但是因为是引用类型,arr也是引用类型,即使obj  push到arr里面了,也只是push进去了一个内存地址而已,所以最后obj变成3了,arr里面引用的obj也会全部变成3。很神奇吧,最后解决的办法也很简单

var a = [ [],[],[1,2,3] ]
var b = ['颜色','大小','尺寸']
var arr = []
for(let i = 0; i < a.length; i ++){
  for(let j = 0; j < a[i].length; j ++){
  let obj = {}
    obj[b[i]] = a[i][j]
    arr.push(obj)
  }
}
console.log(arr)

只要把obj的声明放在最内层的循环里面,每次循环都会是单独的一个内存地址,这样最后的obj即使变成了3,前面的obj也不会被影响到,因为他们的内存地址根部不同。

以上所述是小编给大家介绍的JavaScript 值类型和引用类型的初次研究(推荐),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# javascript  # 值类型和引用类型  # JavaScript中值类型和引用类型的区别  # JavaScript对象内置对象  # 值类型和引用类型讲解  # JavaScript基本数据类型及值类型和引用类型  # js中的值类型和引用类型小结 文字说明与实例  # JavaScript中值类型与引用类型实例说明  # js中值类型和引用类型的区别介绍  # 都是  # 放在  # 这类  # 小编  # 堆中  # 他们的  # 也会  # 变量值  # 第一个  # 在此  # 是这样  # 两种  # 要把  # 数据结构  # 也很  # 给大家  # 弹出  # 影响到  # 多说  # 这是因为 


相关文章: 婚礼视频制作网站,学习*后期制作的网站有哪些?  建设网站制作价格,怎样建立自己的公司网站?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  如何高效利用亚马逊云主机搭建企业网站?  孙琪峥织梦建站教程如何优化数据库安全?  建站之星伪静态规则如何正确配置?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  魔方云NAT建站如何实现端口转发?  子杰智能建站系统|零代码开发与AI生成SEO优化指南  做企业网站制作流程,企业网站制作基本流程有哪些?  如何通过网站建站时间优化SEO与用户体验?  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  建站之星logo尺寸如何设置最合适?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  建站之星如何快速生成多端适配网站?  如何在云主机上快速搭建多站点网站?  网站专业制作公司有哪些,做一个公司网站要多少钱?  如何高效生成建站之星成品网站源码?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  建站之星如何实现网站加密操作?  深圳网站制作案例,网页的相关名词有哪些?  香港网站服务器数量如何影响SEO优化效果?  如何在橙子建站上传落地页?操作指南详解  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  网站制作说明怎么写,简述网页设计的流程并说明原因?  如何在阿里云虚拟主机上快速搭建个人网站?  高端企业智能建站程序:SEO优化与响应式模板定制开发  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  宝塔新建站点为何无法访问?如何排查?  青岛网站建设如何选择本地服务器?  高端建站三要素:定制模板、企业官网与响应式设计优化  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  如何自定义建站之星模板颜色并下载新样式?  攀枝花网站建设,攀枝花营业执照网上怎么年审?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  ,石家庄四十八中学官网?  如何高效完成自助建站业务培训?  如何用PHP快速搭建CMS系统?  香港服务器如何优化才能显著提升网站加载速度?  已有域名如何免费搭建网站?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  制作表格网站有哪些,线上表格怎么弄?  C#怎么使用委托和事件 C# delegate与event编程方法  电商平台网站制作流程,电商网站如何制作?  如何在万网主机上快速搭建网站?  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。