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

原始值和引用值类型及区别相关推荐

  1. 【JS】原始值与引用值、执行上下文与作用域链、作用域链增强、变量声明、标识符查找

    1.原始值与引用值 EcmaScript变量可以包含两种不同类型的数据:原始值.引用值 原始值:最简单的数据 引用值:由多个值构成的对象 六种原始值: Undefined Null Boolean N ...

  2. 012_原始值和引用值

    1. 在JavaScript中, 变量可以存在两种类型的值, 即原始值和引用值. 2. 原始值 2.1. 存储在栈(stack)中的简单数据段, 也就是说, 它们的值直接存储在变量访问的位置. 2.2 ...

  3. JavaScript检测原始值、引用值、属性

    上周写过一篇读书笔记<编写可维护的JavaScript>之编程实践,其中 第8章 避免『空比较』是博主在工作中遇坑较多的雷区,所以特此把该章节重新整理分享,希望大家不再坑队友(>﹏& ...

  4. (P36-P39)右值和右值引用、右值引用的作用以及使用、未定引用类型的推导、右值引用的传递

    文章目录 1.右值 2. 右值引用 3.性能优化 4.&& 的特性 5.右值引用的传递 1.右值 C++11 增加了一个新的类型,称为右值引用( R-value reference), ...

  5. java左值与右值问题_[C++11]左值、右值、左值引用、右值引用小结

    左值和右值 左值:指表达式结束后依然存在的持久对象,可以取地址,具名变量或对象 右值:表达式结束后就不再存在的临时对象,不可以取地址,没有名字. 比如 int a = b + c;,a 就是一个左值, ...

  6. [C++11]左值、右值、左值引用、右值引用小结

    左值和右值 左值:指表达式结束后依然存在的持久对象,可以取地址,具名变量或对象 右值:表达式结束后就不再存在的临时对象,不可以取地址,没有名字. 比如 int a = b + c;,a 就是一个左值, ...

  7. [c++]-c++中的左值和右值、左值引用和右值引用、万能引用和引用折叠及完美转发

    1.左值和右值 1.1左值和右值定义 在c++中,左值是一个指向内存的东西,换句话来讲,左值有地址,保存在内存中,右值则为不指向任何地方东西,即不在内存中占有确定位置.一般来说,右值是暂时和短暂的,而 ...

  8. C++11 左值、右值、右值引用详解

    C++11 左值.右值.右值引用详解 左值.右值 在C++11中所有的值必属于左值.右值两者之一,右值又可以细分为纯右值.将亡值. 在C++11中可以取地址的.有名字的就是左值,反之,不能取地址的.没 ...

  9. java中数组的返回值是什么类型_java基础学习:数组的常用操作与基础二维数组用法、及基本数据类型和引用数据类型赋值的区别...

    一.Arrays jdk中为了便于开发,给开发者提供了Arrays类,其中包含了很多数组的常用操作.例如快速输出.排序.查找等. 1.数组的常用方法 1.数组以字符串形式的输出,2.sort对数组排序 ...

最新文章

  1. 美国《时代》周刊公布年度25大最佳发明名单
  2. linux网络操作系统应用技术规程,GB/T 32395-2015
  3. 每天一个linux命令(28):tar命令
  4. boost asio io_context 没任务不退出
  5. mysql dr模式_DR模式下的mysql (abb读写分离)
  6. newtonsoft 数组反序列化_漏洞学习篇之反序列化
  7. linux100台服务器免密,多台Linux服务器之间互相免密登陆,脚本同步免密
  8. Android SDK Setup如何使用?
  9. java fri星期转_Java日期时间以及日期相互转换
  10. x86 vt-d在linux中的应用
  11. Eclipse, jsp代码修改之后,页面却没有变化!解决思路
  12. ubuntu使用教程
  13. DBVisualizer导入excel数据
  14. 程序员路在何方的辛苦工作
  15. zynq usb dwc3中断事件异常
  16. 基本乐理知识——和弦
  17. matlab论文致谢,2020大学毕业论文致谢信
  18. 超算对我们的生活有着什么样的影响?
  19. 鸡尾酒问题,最小二乘法和范数的思考
  20. 处理器架构 (十五) 国产cpu芯片与架构

热门文章

  1. 搜索框和按钮放在同一行
  2. Clipper库中文文档(ClipperLib)
  3. 大学生日记 我走出了农村 却永远走不进城市
  4. JavaScript赋值运算符,比较运算符,逻辑运算符
  5. 【Spring Cloud Alibaba 实战 | 总结篇】Spring Cloud Gateway + Spring Security OAuth2 + JWT 实现微服务统一认证授权和鉴权
  6. 去哪儿网一面:工厂方法模式
  7. 汽车电子MCU开发之路
  8. 视频素材剪辑制作的方法分享
  9. Ubuntu synaptic install
  10. 基于云开发的二手书交易微信小程序