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生命周期详解

