原始值和引用值类型及区别
javascript中原始值和引用值类型及区别
首先原始值和引用值类型都是我们JS中的数据类型,为了充分利用存储空间,定义了不同的数据类型,而且我们JS是弱类型,动态语言,数据类型可变。
原始值(简单数据类型):存储在栈中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。
包含五种简单数据类型:undefined、null、boolean、number 和 string ;可以通过typeof 运算符来判断一个值是否在某种类型的范围内,如果它是原始类型,还可以判断它表示哪种原始类型。
引用值(复杂数据类型):存储在堆中的对象,放在变量的栈空间中的值是该对象存储在堆中的地址,也就是说,存储在变量处的值是一个指针(内存地址),指向存储对象的堆内存中。
包含:Object、function、array等。
区别:
简单数据类型的值是储存在栈中,当把一个变量传递给另一个变量时,是把一个栈中的东西复制到另一个到栈中,并且这两个变量互不影响,修改其中的变量值时,不会改变另外一个变量的结果。
var num1 = 100;
var num2;
num2 = num1;
num1=10;
console.log(num1, num2);// 10, 100
引用值(复杂数据类型)是把引用变量的名称(内存地址)存储在栈中,但是把其实际对象存储在堆中,栈中的内存地址指向堆中的实际对象,当把引用对象传递给另一个变量时,复制的其实是指向实际对象的指针(内存地址),此时两者指向的是同一个数据,若通过方法改变其中一个变量的值,则访问另一个变量时,其值也会跟着改变, 因为JavaScript 中对象的赋值是默认引用赋值的。
var num1 = {
name:‘xiaoming’
}
var num2;
num2 = num1;
num1.name=‘xiaobai’;
console.log(num1, num2);//输出结果相同
但如果你想要复制赋值,另外一个值不会随他的改变而改变,则必须要重新分配对象,此时,该值的原指针(内存地址)改变,则另外一个值不会随他的改变而改变。
var num1 = {
name: ‘xiaoming’
}
var num2 =Object.assign({},num1);
//num2 = num1;
num2.name = ‘xiaobai’;
console.log(num1, num2);//{name: “xiaoming”} {name: “xiaobai”}输出结果不同
————————————————
版权声明:本文为CSDN博主「中南啊哈」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42721322/article/details/106333987
原始值和引用值类型及区别相关推荐
- 【JS】原始值与引用值、执行上下文与作用域链、作用域链增强、变量声明、标识符查找
1.原始值与引用值 EcmaScript变量可以包含两种不同类型的数据:原始值.引用值 原始值:最简单的数据 引用值:由多个值构成的对象 六种原始值: Undefined Null Boolean N ...
- 012_原始值和引用值
1. 在JavaScript中, 变量可以存在两种类型的值, 即原始值和引用值. 2. 原始值 2.1. 存储在栈(stack)中的简单数据段, 也就是说, 它们的值直接存储在变量访问的位置. 2.2 ...
- JavaScript检测原始值、引用值、属性
上周写过一篇读书笔记<编写可维护的JavaScript>之编程实践,其中 第8章 避免『空比较』是博主在工作中遇坑较多的雷区,所以特此把该章节重新整理分享,希望大家不再坑队友(>﹏& ...
- (P36-P39)右值和右值引用、右值引用的作用以及使用、未定引用类型的推导、右值引用的传递
文章目录 1.右值 2. 右值引用 3.性能优化 4.&& 的特性 5.右值引用的传递 1.右值 C++11 增加了一个新的类型,称为右值引用( R-value reference), ...
- java左值与右值问题_[C++11]左值、右值、左值引用、右值引用小结
左值和右值 左值:指表达式结束后依然存在的持久对象,可以取地址,具名变量或对象 右值:表达式结束后就不再存在的临时对象,不可以取地址,没有名字. 比如 int a = b + c;,a 就是一个左值, ...
- [C++11]左值、右值、左值引用、右值引用小结
左值和右值 左值:指表达式结束后依然存在的持久对象,可以取地址,具名变量或对象 右值:表达式结束后就不再存在的临时对象,不可以取地址,没有名字. 比如 int a = b + c;,a 就是一个左值, ...
- [c++]-c++中的左值和右值、左值引用和右值引用、万能引用和引用折叠及完美转发
1.左值和右值 1.1左值和右值定义 在c++中,左值是一个指向内存的东西,换句话来讲,左值有地址,保存在内存中,右值则为不指向任何地方东西,即不在内存中占有确定位置.一般来说,右值是暂时和短暂的,而 ...
- C++11 左值、右值、右值引用详解
C++11 左值.右值.右值引用详解 左值.右值 在C++11中所有的值必属于左值.右值两者之一,右值又可以细分为纯右值.将亡值. 在C++11中可以取地址的.有名字的就是左值,反之,不能取地址的.没 ...
- java中数组的返回值是什么类型_java基础学习:数组的常用操作与基础二维数组用法、及基本数据类型和引用数据类型赋值的区别...
一.Arrays jdk中为了便于开发,给开发者提供了Arrays类,其中包含了很多数组的常用操作.例如快速输出.排序.查找等. 1.数组的常用方法 1.数组以字符串形式的输出,2.sort对数组排序 ...
最新文章
- 美国《时代》周刊公布年度25大最佳发明名单
- linux网络操作系统应用技术规程,GB/T 32395-2015
- 每天一个linux命令(28):tar命令
- boost asio io_context 没任务不退出
- mysql dr模式_DR模式下的mysql (abb读写分离)
- newtonsoft 数组反序列化_漏洞学习篇之反序列化
- linux100台服务器免密,多台Linux服务器之间互相免密登陆,脚本同步免密
- Android SDK Setup如何使用?
- java fri星期转_Java日期时间以及日期相互转换
- x86 vt-d在linux中的应用
- Eclipse, jsp代码修改之后,页面却没有变化!解决思路
- ubuntu使用教程
- DBVisualizer导入excel数据
- 程序员路在何方的辛苦工作
- zynq usb dwc3中断事件异常
- 基本乐理知识——和弦
- matlab论文致谢,2020大学毕业论文致谢信
- 超算对我们的生活有着什么样的影响?
- 鸡尾酒问题,最小二乘法和范数的思考
- 处理器架构 (十五) 国产cpu芯片与架构