JavaScript 面向对象完全掌握核心原理详解(3) js面向对象数据内存空间图分析

简介: JavaScript 面向对象数据内存空间图分析

🚀 个人主页 极客小俊
✍🏻 作者简介:web开发者、设计师、技术分享博主
🐋 希望大家多多支持一下, 我们一起进步!😄
🏅 如果文章对你有帮助的话,欢迎评论 💬点赞👍🏻 收藏 📂加关注

标量类型的值 一般存储在栈区中!

标量指: 整型、浮点、字符串、布尔值、等..

对象类型分为: 对象引用 和 对象体!

对象引用存储在栈区中 、对象体存储在堆区中、

1. 内存空间基本数据存储分析图1

1.png

注意: 一旦new一个对象,就必然会在内存中生成新的的区域来存储对象数据

而且最重要的就是这个时候在内存中对象的地址是不一样的 , 因为 new 会生成一个新的地址在栈区中

2.对象引用类型地址传递分析图2

代码案例1:

var json={
   
   
    "username":"张三",
    "age":22,
    "fn1":function(){
   
   
        console.log('我的名字叫'+this.username);
    }
}

//通过对象引用修改属性值1
/*function fn2(obj){
     obj.username="李四";
}
fn2(json);*/

//通过对象引用修改属性值2
var a=json;
a.username='李四';

console.log(json.username);

分析图如下
2.png

3.对象引用类型地址传递分析图3

代码案例2:

function Person(name,age,salary) {
   
   
    this.name=name;
    this.age=age;
    this.salary=salary;
}

function fn1(obj) {
   
   
    obj.name='王武';
    obj=new Person('李四',24,8000);
    console.log(obj.name);
}

var obj=new Person('张三',33,6000);

console.log(obj.name);    //结果: 张三

fn1(obj);                //结果 李四

console.log(obj.name);  // 王武

分析图如下

3.png

对象引用 图分析小结:

  1. 在js中, 普通变量值作为函数的参数就是 值传递

  2. 在js中, 对象引用类型的变量作为函数的参数 就是 ==址传递==!

    ​ 所以 注意一下 这里的值传递址传递

  3. 一旦new一个对象 就一定会在堆区中创建一个空间,并赋予一个新地址 上面已经说过了!

4.对象数据的比较

在js中、基本数据类型数据的比较 是值的比较 值相同就可以了、

对象类型的比较 要满足两个要求、 第一是值要相同、第二引用地址也要相同才行

案例代码:

//--案例1
var a=[1,2,3];
var b=[1,2,3];

console.log(a==b);  //结果为false  虽然值一样,但地址是不同的!


var a=[1,2,3];
var b=a;
console.log(a==b);  //结果为true  因为b指向了a这个地址,并且值也能够得到!

原理图 如下:

4.png

相关文章
|
2月前
|
算法 JavaScript 前端开发
新生代和老生代内存划分的原理是什么?
【10月更文挑战第29天】新生代和老生代内存划分是JavaScript引擎为了更高效地管理内存、提高垃圾回收效率而采用的一种重要策略,它充分考虑了不同类型对象的生命周期和内存使用特点,通过不同的垃圾回收算法和晋升机制,实现了对内存的有效管理和优化。
|
2月前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
springboot解决js前端跨域问题,javascript跨域问题解决
|
2月前
|
存储 编译器 数据处理
C 语言结构体与位域:高效数据组织与内存优化
C语言中的结构体与位域是实现高效数据组织和内存优化的重要工具。结构体允许将不同类型的数据组合成一个整体,而位域则进一步允许对结构体成员的位进行精细控制,以节省内存空间。两者结合使用,可在嵌入式系统等资源受限环境中发挥巨大作用。
94 11
|
2月前
|
JavaScript 前端开发
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
|
2月前
|
监控 JavaScript 算法
深度剖析 Vue.js 响应式原理:从数据劫持到视图更新的全流程详解
本文深入解析Vue.js的响应式机制,从数据劫持到视图更新的全过程,详细讲解了其实现原理和运作流程。
|
2月前
|
Web App开发 JavaScript 前端开发
使用 Chrome 浏览器的内存分析工具来检测 JavaScript 中的内存泄漏
【10月更文挑战第25天】利用 Chrome 浏览器的内存分析工具,可以较为准确地检测 JavaScript 中的内存泄漏问题,并帮助我们找出潜在的泄漏点,以便采取相应的解决措施。
466 9
|
3月前
|
监控 算法 应用服务中间件
“四两拨千斤” —— 1.2MB 数据如何吃掉 10GB 内存
一个特殊请求引发服务器内存用量暴涨进而导致进程 OOM 的惨案。
106 14
|
2月前
|
数据采集 存储 JavaScript
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
本文介绍了如何使用Puppeteer和Node.js爬取大学招生数据,并通过代理IP提升爬取的稳定性和效率。Puppeteer作为一个强大的Node.js库,能够模拟真实浏览器访问,支持JavaScript渲染,适合复杂的爬取任务。文章详细讲解了安装Puppeteer、配置代理IP、实现爬虫代码的步骤,并提供了代码示例。此外,还给出了注意事项和优化建议,帮助读者高效地抓取和分析招生数据。
108 0
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
|
3月前
|
存储 C语言
数据在内存中的存储方式
本文介绍了计算机中整数和浮点数的存储方式,包括整数的原码、反码、补码,以及浮点数的IEEE754标准存储格式。同时,探讨了大小端字节序的概念及其判断方法,通过实例代码展示了这些概念的实际应用。
188 1
|
3月前
|
存储
共用体在内存中如何存储数据
共用体(Union)在内存中为所有成员分配同一段内存空间,大小等于最大成员所需的空间。这意味着所有成员共享同一块内存,但同一时间只能存储其中一个成员的数据,无法同时保存多个成员的值。