保存数组类型数据_JS基本数据类型和引用数据类型的区别及深浅拷贝
1、栈(stack)和堆(heap)
stack为自动分配的内存空间,它由系统自动释放;而heap则是动态分配的内存,大小也不一定会自动释放
2、数据类型
JS分两种数据类型:
基本数据类型:Number、String、Boolean、Null、 Undefined、Symbol(ES6),这些类型可以直接操作保存在变量中的实际值。
引用数据类型:Object(在JS中除了基本数据类型以外的都是对象,数据是对象,函数是对象,正则表达式是对象)
3、基本数据类型(存放在栈中)
基本数据类型是指存放在栈中的简单数据段,数据大小确定,内存空间大小可以分配,它们是直接按值存放的,所以可以直接按值访问
var a = 10;
var b = a;
b = 20;
console.log(a); // 10值
console.log(b); // 20值
下图演示了这种基本数据类型赋值的过程:
4、引用数据类型(存放在堆内存中的对象,每个空间大小不一样,要根据情况进行特定的配置)
引用类型是存放在堆内存中的对象,变量其实是保存的在栈内存中的一个指针(保存的是堆内存中的引用地址),这个指针指向堆内存。
引用类型数据在栈内存中保存的实际上是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存中堆内存中的对象
var obj1 = new Object();var obj2 = obj1;obj2.name = "我有名字了";console.log(obj1.name); // 我有名字了
说明这两个引用数据类型指向了同一个堆内存对象。obj1赋值给obj2,实际上这个堆内存对象在栈内存的引用地址复制了一份给了obj2,但是实际上他们共同指向了同一个堆内存对象,所以修改obj2其实就是修改那个对象,所以通过obj1访问也能访问的到。
var a = [1,2,3,4,5];
var b = a;//传址 ,对象中传给变量的数据是引用类型的,会存储在堆中;
var c = a[0];//传值,把对象中的属性/数组中的数组项赋值给变量,这时变量C是基本数据类型,存储在栈内存中;改变栈中的数据不会影响堆中的数据
alert(b);//1,2,3,4,5
alert(c);//1
//改变数值
b[4] = 6;
c = 7;
alert(a[4]);//6
alert(a[0]);//1
从上面我们可以得知,当我改变b中的数据时,a中数据也发生了变化;但是当我改变c的数据值时,a却没有发生改变。
这就是传值与传址的区别。因为a是数组,属于引用类型,所以它赋予给b的时候传的是栈中的地址(相当于新建了一个不同名“指针”),而不是堆内存中的对象。而c仅仅是从a堆内存中获取的一个数据值,并保存在栈中。所以b修改的时候,会根据地址回到a堆中修改,c则直接在栈中修改,并且不能指向a堆内存中。
5、浅拷贝
前面已经提到,在定义一个对象或数组时,变量存放的往往只是一个地址。当我们使用对象拷贝时,如果属性是对象或数组时,这时候我们传递的也只是一个地址。因此子对象在访问该属性时,会根据地址回溯到父对象指向的堆内存中,即父子对象发生了关联,两者的属性值会指向同一内存空间。
var a={key1:"11111"}function Copy(p){ var c ={}; for (var i in p){ c[i]=p[i] } return c;}a.key2 = ["小辉
保存数组类型数据_JS基本数据类型和引用数据类型的区别及深浅拷贝相关推荐
- 保存数组类型数据_「Java」基础12:什么叫数组?
所谓数组,就是有序的元素序列 ,在数学里面都有讲到这个概念. 那么程序中的数组和数学里的数组又有哪些不同呢? 一.数组的定义与访问 举一个现实生活中的例子: 一个500毫升的杯子,既可以拿来装水,也可 ...
- mysql blob 存储乱码_mysql 保存 blob 类型数据 乱码 解决
本人问题:mysql 保存 blob 类型数据 乱码 解决 未解决,??? 之前 private string archiveValue;导致 写入的进去之后的中文 都是乱码 改正后 ,即可 pri ...
- java中数组的返回值是什么类型_java基础学习:数组的常用操作与基础二维数组用法、及基本数据类型和引用数据类型赋值的区别...
一.Arrays jdk中为了便于开发,给开发者提供了Arrays类,其中包含了很多数组的常用操作.例如快速输出.排序.查找等. 1.数组的常用方法 1.数组以字符串形式的输出,2.sort对数组排序 ...
- ES6 深拷贝_JS基本数据类型和引用数据类型的区别及深浅拷贝
1.栈(stack)和堆(heap) stack为自动分配的内存空间,它由系统自动释放:而heap则是动态分配的内存,大小也不一定会自动释放 2.数据类型 JS分两种数据类型: 基本数据类型:Numb ...
- java引用数据类型可以更改类型_java,基本数据类型和引用数据类型
java中的数据类型分为基本数据类型和引用数据类型 基本数据类型 整型:byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean 引用数据类型 ...
- JavaScript中的基本数据类型与引用数据类型
JavaScript中的基本数据类型与引用数据类型 转载自:https://www.cnblogs.com/c2016c/articles/9328725.html 1.栈(stack)和堆(heap ...
- JavaScript数据类型基本数据类型与引用数据类型的区别
JavaScript数据类型 1.JavaScript判断数据类型 typeof操作符 使用typeof操作符可以返回变量的数据类型 typeof操作符有带括号和不带括号两种用法 typeof (变量 ...
- 【JavaScript】关于基本数据类型和引用数据类型
基本数据类型 JavaScript的基本数据类型有: String-字符串类型 Number-整形-----NaN也属于数值型 Boolean-布尔类型 null undefined-undefine ...
- JAVA基本数据类型与引用数据类型
JAVA基本数据类型与引用数据类型 Java提供了两类数据类型:一种是基本类型(原始类型),一种是引用类型. - 数据类型图: ┏数值型━┳━整数型:byte short int long ┏基本数据 ...
最新文章
- Python中函数的参数定义和可变参数
- 我的计算机书籍创作心得
- 前松后紧和前紧后松——想起PM的点滴
- 从库存管理系统,体验活字格强大的移动端应用开发能力
- 什么是隐形门? 隐形门安装要注意什么
- Android Studio(十):添加assets目录
- 游戏引擎BigWorld宣布将在4.0版本支持HTML5
- NTP时间服务器安装配置详解
- JuiceFS 如何帮助趣头条超大规模 HDFS 降负载
- Mac上的三款时钟屏保
- python pyqt5 股票分时_Python使用PyQtGraph绘制股票行情K线图
- 导入、配置Vuetify遇到的的几个问题
- Navicat Premium 用于增强您的数据库管理系统
- centos7防火墙开放端口,附开放samba特定端口实例
- ·穷途末路之举·解决VirtualBox启动问题-Error relaunching VirtualBox VM process 5/terminated with exit code1(0x1)
- linux命令kill9的含义,[整理]kill -9的含义
- vsftpd之主动模式 被动模式
- 推荐:六款强大的开源数据挖掘工具
- 创立1年拿下品类第一,创始人一句话引爆6亿阅读量,钟薛高为何如此吸睛?
- PR片头模板 漫威超级英雄电影开场片头特效PR模板