第183天:引用类型和值类型

简介: 一、内存分配1、数值型内存分配 1 2 var num1; //这个时候不进行内存分配 3 var num3=9;//分配内存 4 var num4=num3;//会不会分配 5 6 // 这里到底分配还是不分配内存?? 7 // 答案 --分配内存 彼此拥有独立的内存空间,互不影响 8 console.

一、内存分配

1、数值型内存分配

 1 <script>
 2     var num1; //这个时候不进行内存分配
 3     var num3=9;//分配内存
 4     var num4=num3;//会不会分配
 5 
 6      //  这里到底分配还是不分配内存??
 7      // 答案 --分配内存 彼此拥有独立的内存空间,互不影响
 8     console.log(num3);
 9     console.log(num4);
10 
11     num3=3333333;
12     num4=4444444;
13     console.log(num3);
14     console.log(num4); //当更改数据,值不一样的本质是这里分配两个空间独立存储
15 
16 
17 </script>

2、字符串内存分配

 1 <script>
 2     //字符串
 3     var str1; //这个时候不进行内存分配
 4     var str2 = '乐乐'; //分配内存
 5     var str3=str2; //问题,这里str3 会不会分配内存??
 6     
 7     //答案:会
 8     console.log(str1);
 9     console.log(str2);
10     console.log(str3);
11     console.log(str2===str3); //比较的是指针指向的内存空间中存储的值
12 
13     str2 ='lalala222222222';
14     str3 ='lalala333333333';
15     console.log(str2);//lalala222222222
16     console.log(str3);//lalala333333333
17 </script>

3、数组内存分配

 1 <script>
 2     //    数组 : 当定义一个新数组,
 3     // 内存会产生两片区域,一个存储变量,一个存储数组 变量中保存的只是数组所在的地址
 4     var arr1=['乐乐','淘淘'];//分配内存
 5     //引用类型其实是指向同一个地址,也就是操纵的其实是同一个位置
 6     var arr2=arr1;   //问题:这里arr2会不会分配内存
 7     console.log(arr1[0]);//乐乐
 8     console.log(arr2[0]); //乐乐   一样
 9 
10 
11     //修改数组1
12     arr2[0]='水浒传 西游记 三国演义 红楼梦';
13     console.log(arr1[0]);//水浒传 西游记 三国演义 红楼梦
14     console.log(arr2[0]);//水浒传 西游记 三国演义 红楼梦
15 
16     //一样 说明这里不分配内存,其实arr2变量中存的是地址,指向arr1内存
17 
18 </script>

4、函数内存分配

 1 <script>
 2 
 3 //    系统都会在内存中生成两个区域:一个存储变量,一个用来存储函数
 4 //    而变量中存放的只是函数空间所在的地址(指针)
 5 //    由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。
 6 //由于函数名仅仅是指向函数的指针,
 7 //因此函数名与包含对象指针的其他变量没有什么不同。
 8 //换句话说,一个函数可能会有多个名字,例如:
 9 function sum(num1,num2)
10     {
11         return num1 + num2;
12     }
13 console.log(sum(10,10)); //20
14 
15 var anotherSum = sum;
16 
17  //内存是如何分配的? 这里不会在内存生成新的空间,存储函数,而是生成一个变量,变量中保存的是同一个地址
18 sum = null;//这里只是将sum变量中原来保存的是函数地址,然后赋值成null,这样做并不会影响到函数对象对应的内存空间
19 console.log(anotherSum(10,10)); //20
20 console.log(sum(10,10)); //20
21     
22 </script>

二、引用类型和值类型总结

 1 <script>
 2     function show(x) {
 3         console.log(typeof(x));    // undefined 值类型
 4         console.log(typeof(10));   // number 值类型
 5         console.log(typeof('abc')); // string 值类型
 6         console.log(typeof(true));  // boolean 值类型
 7         console.log(typeof(function () { })); //function 函数 引用类型
 8         console.log(typeof([1, 'a', true]));  //object 数组  引用类型
 9         console.log(typeof ({ a: 10, b: 20 }));  //object 或者json  引用类型
10         console.log(typeof (null));  //object   null  引用类型
11         console.log(typeof (new Number(10)));  //object  内置对象 引用类型
12     }
13     show();
14 //    其中上面的四种(undefined, number, string, boolean)属于值类型,不是对象。
15 //    函数、数组、对象、null、new Number(10)都是对象。他们都是引用类型。
16 
17     var test ={name:'lele'};
18     var test2=  test;
19     console.log(test === test2);//true
20     test.name='lala';
21     console.log(test2.name);//lala
22 
23 </script>

 

相关文章
|
消息中间件 Java 数据格式
【报错】spring整合activeMQ,pom.xml文件缺架包,启动报错:Caused by: java.lang.ClassNotFoundException: org.apache.xbean.spring.context.v2.XBeanNamespaceHandler
spring版本:4.3.13 ActiveMq版本:5.15 ======================================================== spring整合activeMQ,pom.
2098 0
|
JavaScript Java 测试技术
基于springboot+vue.js的无人超市管理系统附带文章和源代码设计说明文档ppt
基于springboot+vue.js的无人超市管理系统附带文章和源代码设计说明文档ppt
198 0
|
算法 计算机视觉
基于opencv的指针式仪表的识别与读数
基于opencv的指针式仪表的识别与读数
|
消息中间件 存储 Java
全网把Kafka概念讲的最透彻的文章,别无二家
消息队列老大哥Kafka在官网的介绍是这么说的,真是霸气:全球财富前100强公司有超过80%信任并使用Kafka。Kafka目前在GitHub目前也已经有star数27.6k、fork数13.6k。大家好,我是南哥。一个对Java程序员进阶成长颇有研究的人,今天我们开启新的一篇Java进阶指南,本期的对象是Kafka。Kafka历史Star趋势图本文收录在我开源的《Java学习面试指南》中,一份涵盖Java程序员所需掌握核心知识、面试重点的Java指南。希望收到大家的 ⭐ Star ⭐支持。
202 1
全网把Kafka概念讲的最透彻的文章,别无二家
|
存储 Python
NumPy 教程 之 NumPy 从已有的数组创建数组 4
在NumPy教程中,了解如何从现有数据创建数组。`numpy.asarray`是简化版的`numpy.array`,接受输入如列表、元组或多维数组,转化为numpy数组。参数包括:`a`作为输入数据,`dtype`指定数据类型,默认为None,`order`定义内存顺序,可选&quot;C&quot;(行优先)或&quot;F&quot;(列优先)。示例:将整数列表 `[1, 2, 3]` 转为浮点数数组 `print(a)` 输出 `[1. 2. 3.]`。
81 3
|
算法
m基于BP译码算法的LDPC编译码matlab误码率仿真,对比不同的码长
MATLAB 2022a仿真实现了LDPC码的性能分析,展示了不同码长对纠错能力的影响。短码长LDPC码收敛快但纠错能力有限,长码长则提供更强纠错能力但易陷入局部最优。核心代码通过循环进行误码率仿真,根据EsN0计算误比特率,并保存不同码长(12-768)的结果数据。
250 9
m基于BP译码算法的LDPC编译码matlab误码率仿真,对比不同的码长
|
存储 弹性计算 缓存
阿里云数据库 SelectDB 版内核 Apache Doris 2.0 如何实现导入性能提升 2-8 倍
Apache Doris 2.0 进一步增强数据导入能力,性能提升 2-8 倍,加速数据实时处理和分析效率!
1116 0
阿里云数据库 SelectDB 版内核 Apache Doris 2.0 如何实现导入性能提升 2-8 倍
|
大数据 双11 流计算
大数据Flink实时大屏统计
大数据Flink实时大屏统计
415 0
|
机器学习/深度学习 存储 自然语言处理
使用预先训练的扩散模型进行图像合成
使用预先训练的扩散模型进行图像合成