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

发布时间 - 2026-01-11 02:24:15    点击率:

值类型:也称为原始数据或原始值(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中值类型和引用类型的区别介绍  # 都是  # 放在  # 这类  # 小编  # 堆中  # 他们的  # 也会  # 变量值  # 第一个  # 在此  # 是这样  # 两种  # 要把  # 数据结构  # 也很  # 给大家  # 弹出  # 影响到  # 多说  # 这是因为 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 济南网站建设制作公司,室内设计网站一般都有哪些功能?  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  Laravel观察者模式如何使用_Laravel Model Observer配置  Laravel如何使用Collections进行数据处理?(实用方法示例)  如何为不同团队 ID 动态生成多个“认领值班”按钮  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  如何正确下载安装西数主机建站助手?  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  如何在建站主机中优化服务器配置?  用v-html解决Vue.js渲染中html标签不被解析的问题  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  如何构建满足综合性能需求的优质建站方案?  如何在景安云服务器上绑定域名并配置虚拟主机?  深入理解Android中的xmlns:tools属性  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  Laravel如何记录自定义日志?(Log频道配置)  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  Android 常见的图片加载框架详细介绍  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  使用豆包 AI 辅助进行简单网页 HTML 结构设计  Laravel如何实现用户注册和登录?(Auth脚手架指南)  Laravel如何处理异常和错误?(Handler示例)  ,交易猫的商品怎么发布到网站上去?  网站制作免费,什么网站能看正片电影?  如何快速辨别茅台真假?关键步骤解析  JavaScript如何实现继承_有哪些常用方法  详解Android图表 MPAndroidChart折线图  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  网站制作企业,网站的banner和导航栏是指什么?  如何用狗爹虚拟主机快速搭建网站?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  英语简历制作免费网站推荐,如何将简历翻译成英文?  Swift开发中switch语句值绑定模式  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  php打包exe后无法访问网络共享_共享权限设置方法【教程】  Bootstrap CSS布局之列表  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  音响网站制作视频教程,隆霸音响官方网站?  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  如何有效防御Web建站篡改攻击?  Laravel模型事件有哪些_Laravel Model Event生命周期详解