js 引用值和原始值

实测有效防止colab自动断开连接 阅读详情

数据类型

js将数据类型分为两种:
1. 原始类型
原始类型有: Number、String、Boolean、Undefined、Null,Symbol(es6)类型。
原始值是大小固定简单的数据段,也就是说数据的大小不会发生变化,并且不能由其他值组成。

Number: 数字类型,1、1.1、-1等等,js中数字类型就包括了浮点型。

String: 字符串类型,带有一对单引号(’ ')或双引号的值(" "),表示字母、符号、数字的统称。比如,我们要输入中文必须但引号: “你好世界”。

Boolean: 布尔类型,只有两个值true(真) or false(假),表示一种状态,代表电路的0或1.

Undefined: 未定义类型,如果变量没有赋值,则变量默认就是undefined,相当于是变量的默认值。

Null(空): 占位,表示一个没有引用的对象,比如一个对象var obj = new Object();比如说不要这个对象了,可以用null表示空引用。

Symbol: es6新增,表示独一无二的值。

2. 引用类型
也叫复合类型,复杂(引用)值可以由很多不同类型的数据组成,引用值的大小在内存中是未知的,因为引用值可以包含多个值,而不是特定的已知值。

引用类型有: 数组(Array)、对象(Object)、函数(Function)等等

例如:
数组:正常变量是一个容器,它是一排容器,所以能存储多个值,相当于一次性申请了多个连续的内存空间一样。

var arr = [1,2,3,4,5,false,"abc"]

js是动态语言解释一行执行一行,因此在js里是由值决定变量的类型

//值是数字,因此变量的类型就是数字类型
var a = 10; 
//由于js是动态语言,所以可以改成其它类型值
a = 'hi';

堆和栈:

js引擎将内存划分为两种内存空间: 堆和栈,程序执行前,引擎会为数据分配内存空间,不同类型数据会分配到不同内存空间中。

栈存储
系统自动分配固定的内存,数据先进后出,像一个有底没顶的箱子,线性结构。由于原始类型数据的值是固定大小的,所以存放在栈中,方便查找。基本类型的值是按值访问的,因为可以操作保存在变量中的实际值。

在js中变量就是指向(标识)栈内存的位置,变量的位置就是栈内存的位置,变量名就表示栈内存的名字,当你声明一个变量时就会在栈内存中分配空间。

var a = 10;

以上代码会在栈内存中分配空间并命名为a

栈内存和栈内存之间的赋值是拷贝,一个变量向另一个变量赋值原始值时。,复制的是该值的一个副本。

var a = 10;
var b = a;

ab是原始值,首会在栈底依次申请a和b两个空间,然后引擎会取出a的值,拷贝一份给b,b的值是a的副本,a和b互不影响,不管改了哪个变量的值都不会影响到另一个变量的值。
在这里插入图片描述
原始值有个特点叫不可改变的原始值,就是一个内存空间已经存储值了,就不能在这个内存空间上改变数据值,而是开辟另一块内存并命名,而原来的内存空间的命名被擦除掉而找不到这个内存空间。

这就是我上面说的,栈是分配固定大小内存,赋予新值时,不可以在原来空间上覆盖数据,因为空间已经固定大小了,当你赋予新会重新分配空间。

var a = 10;
var b = a;
a = 20;
/*
	a重新赋值,会在开辟另一个内存空间并命名为a
	而原来的叫a的内存空间,会被擦除变量名。
*/

在这里插入图片描述

内存原理: 我们清理内存时,数据并没有被删除了,数据还在内存里,内存中删掉的数据只是清除标号,让这个空间找不到了,但是如果内存满了然后你在清理内存,把标号全部清除,系统会告诉你还有多少空间,其实这个数据还存在并没有清除,当你在存新东西的时候,新东西会覆盖旧的东西(二次覆盖),这个时候数据是真被删除了,所以我们想删除数据时,多往内存存东西就行了。

堆存储
系统动态分配内存,像一个书架,怎么拿怎么放,散列结构。引用值是指由多个数据值组成的对象,值大小未知,因此存储在堆中,由于js不允许直接访问堆中的位置,因此栈中会存储该对象在堆中的引用地址(引用地址的大小是固定的),指向堆中的对象。在访问时,会通过栈中存储的引用地址找到堆中的对象。

下面的代码会发以下操作:
1.首先会栈中申请一个空间并命名为arr。
2.当引擎读到[1,2],会将其存放在堆中。
3.栈中的arr会存放[1,2]在堆中的引用地址。
4.当读取[1,2]时,会通过栈中存储的引用地址找到[1,2]。

var arr = [1,1];
console.log(arr[0]);

在这里插入图片描述

当一个变量向另一个变量赋值引用值时,复制的是地址,因为不能直接操作堆中的数据,所以只能复制地址,因此arr1和arr都指向[1,2],该从一个变量改变值,另一个变量的值也会受到影响,arr重新赋予引用值,指向了新的空间。

var arr = [1,2];
var arr1 = arr;
arr = [1,3];
document.write(arr1) //1,2

在这里插入图片描述

我们可以得出一个结论,在js中可以直接访问栈内存的位置,因此可以直接操作原始值,而不能直接访问堆内存中的位置,所以只能通过引用地址间接访问引用值,所以说原始值可以按值访问,而引用值只能是按引用地址访问。

手把手教你实现阿克曼ROS小车的运动控制 本文详细介绍了如何从零开始实现阿克曼ROS小车的运动控制。内容涵盖硬件搭建、STM32底层PID速度与舵机控制、ROS层阿克曼运动学模型解析,以及上下位机通信协议设计。通过手把手的代码示例和调试步骤,帮助机器人爱好者与开发者掌握将高级速度指令转化为小车具体动作的全流程,实现流畅的阿克曼转向控制。 阅读详情

相关推荐

PWM控制技术+Simulink仿真详解

想要理解SVPWM控制技术,首先要了解PWM控制技术。 PWM控制技术就是对脉冲宽度进行调制的技术,通过对一系列脉冲宽度进行调制来等效获得所需要的波形(包括形状和幅值)。 PWM控制的基本原理:冲量(窄脉冲的面积)相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果(输出响应波形)基本相同,即面积等效原理;用一系列幅值相等,宽度按一定规律变化的高频脉冲序列代替期望的输出波形,多用于逆变电路的控制; PWM信号生成的方法有:计算法、调制法、跟踪法,主要对调制法进行详解 ...

小师兄的学习记录 5万+

原始值(primitive value)

简单的说:原始值是固定而简单的值,是存放在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置.   原始值是表示Javascript中可用的数据或信息的最底层形式或最简单形式。原始类型的值被称为原始值,是因为它们是不可细化的。也就是说,数字是数字,字符是字符,布尔值则是true或false,null和undefined就是null和undefined。这些值本身很简...

qq_37683424的博客 4566

Spring Boot整合Apache Hop 2.3.0实战:从零搭建数据管道(附完整代码)

本文详细介绍了如何在Spring Boot项目中整合Apache Hop 2.3.0,从零开始构建可嵌入的数据管道。内容涵盖环境初始化、依赖配置、管道设计,并通过完整代码示例演示了如何通过REST API触发执行,实现数据同步与ETL流程的自动化管理,为微服务架构提供灵活的数据集成方案。

web99的专栏 632

JavaScript中原始值的理解

1. 什么是原始值? 原始类型的值即为原始值。 2.JS中有哪些原始类型? 一共有7种,分别是Number、String、Boolean、Null、Undefined、BigInt、Symbol 3、原始值不可变的意思 我们经常用变量来保存一个原始值,而变量的值是可以修改的,但是这不是说原始值可以修改。变量的值修改后是指这个变量指向的地址被修改了,也就是指向了其他的原始值,而之前的原始值还在那里,...

qq784637494的博客 1292

QGC二次开发实战指南(一):从零构建自定义地面站界面

本文详细介绍了QGC二次开发实战指南,从零开始构建自定义地面站界面。通过QT和QML技术结合MAVLINK协议,开发者可以打造适合特定业务场景的无人机监控系统,提升操作效率与用户体验。文章包含环境搭建、界面设计、数据绑定等完整开发流程,是QGC二次开发的实用教程。

weixin_28693683的博客 496

DEM边界数值爆炸?用ArcGIS空间分析工具链搞定异常值过滤全流程

本文针对DEM数据处理中常见的边界数值爆炸问题,提供了一套完整的ArcGIS空间分析解决方案。文章深入剖析了异常值产生的根源,并详细介绍了从诊断、定位到使用栅格计算器、重分类等工具进行精准过滤与修复的全流程工作流,帮助用户彻底解决由插值误差、数据拼接及坐标系转换引发的数值异常。

weixin_29269441的博客 149

js 整数类型的默认值

因此,在定义数字变量时最好明确指定其默认值。在 JavaScript 中,未初始化的变量的值为。,但是如果将其用作数字,它将转换为。

WDY66886688的博客 647

手把手教你用STM32的ADC读取PT100模块,实现高精度温度采集(附完整代码)

本文详细介绍了如何利用STM32的ADC模块读取PT100温度传感器信号,实现高精度温度采集系统。从硬件选型、ADC配置校准到温度计算算法和软件滤波技术,提供完整的实现方案和优化技巧,帮助工程师快速构建稳定可靠的温度监测系统。

weixin_29185199的博客 348

js 变量 赋予默认值

function getcode(){ //三个参数嘛,最后一个默认是0哦! var obj = arguments[0] ? arguments[0] : ''; var code = arguments[1] ? arguments[1] : ''; var name = arguments[2] ? arguments[2]

ROVAST的专栏 4777

GPS定位不准?可能是GDOP在作怪!手把手教你优化卫星几何分布

本文深入解析了GPS定位精度不佳的常见原因——几何精度因子GDOP。通过剖析卫星几何分布对定位误差的放大效应,文章提供了从理解GDOP、PDOP、HDOP等关键指标,到使用专业APP实时诊断卫星天空图,再到利用在线工具提前规划最佳定位时机的完整实战指南。旨在帮助户外爱好者、无人机飞手及专业用户主动优化卫星几何条件,从而显著提升定位可靠性。

weixin_29062823的博客 306

uniapp(安卓 | 苹果) - 最新详细实现App打包发布教程,uni-app苹果IOS软件应用上架App Store软件商店,uni-app打包发布安卓Android软件到各大应用商店(详细教程

uni-app,安卓android,苹果ios,uniapp App软件,Uniapp上架发布应用,打包构建,apk、app软件,应用商店,应用市场,app store,uni-app安卓苹果app上架应用商店,app应用从创建到上架_uniapp打包app的流程和上架,uniapp打包上架ios Appstore 最全流程,苹果应用商店上架教程,uniapp生成的app怎么上架到iphone的app store,uni-app打包到上架Android , ios完整详细流程,审核一直不通过,软件商店审核失

✅ 精选推荐文章 1万+

JavaScript中字典的常用操作

字典是一种以键值对存在的数据结构 创建方式1

whr 1万+

资源分享·病毒样本下载资源分享

一、微步云沙箱 微步在线云沙箱https://s.threatbook.cn/ 使用病毒sha256即可寻找病毒样本;该站点也可上传可疑文件/可疑URL地址到沙箱中,进行分析 。 以永恒之蓝为例,样本sha256是:ed01ebfbc9eb5bbea545af4d01bf5f1071661840480439c6e5babe8e080e41aa 下载样本或流量监控,需要消耗积分: 二、AnyRun Interactive Online Malware Analysis Sandbox.

不忘初心,护天下安全! 2万+

JavaScript 原始值和引用值的各种区别

JavaScript 中的变量是松散类型(弱类型)的,没有规则定义某个变量必须是什么数据类型,因此变量的值和数据类型在程序运行过程中可以改变。 JavaScript 存储在变量中的数据类型可以分成两种: 原始值:Number、String、Boolean、Undefined、Null、Symbol、BigInt 引用值:Object(其中包括 Array、Function 等等) 数据的存储 原始值是直接存储在**栈(stack)**中的简单数据段,占用空间小、大小稳定,属于会被频繁访问的数据,所以存储在栈

黄凯达的博客 1232

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Js 中的原始值和引用值

        最近开始注重自己的基础知识,以前总是觉得自己什么都要会一点,不精也没关系,现在想想,感觉这种想法是错误的。一些最基本的基础底层知识还是要很扎实的。Js原始值        原始值即一些代表原始数据类型的值,也叫基本数据类型,首先说一下js中有哪些原始值,Number,String,Boolean,Null,Undefined这些基本数据类型都是原始值。原始值存储在栈中。意思就是说,...

sunshine的博客 4617

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

(一)JavaScript-原始值和引用值

原始值和引用值 一、基本概念 1、原始值 指原始类型的值,也叫基本类型 例如:Number、String、 Boolean、Null、Undefined​​ 存储在 栈(stack),值存储在变量访问的位置 2、引用值 指引用类型的值 例如:Object、Function、Array、Data、RegExp 存储在 堆(heap),值是一个指针,指向存储对象的内存处 二、原始值和引用值的不同 1、赋值方式 原始值 是以“值”的拷贝方式赋值,值是不可变的 引用值 是以“引用”的拷贝方式赋值,值是可变的 2、比

sunshineTing2的博客 588

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

js 原始值和引用值

原始值和引用值原始值和引用值原始值的拷贝引用值的拷贝 这篇文章是为了解释浅拷贝和深拷贝的预备文章,不做详细说明,但助于理解浅拷贝和深拷贝。 想看详细说明的文章,请移步:ECMAScript 原始类型 原始值和引用值 JS变量可以包含两种不同类型的数据:原始值和引用值 原始值 原始值是固定而简单的值, 存放在栈(stack)中的简单数据段 它们的值直接存储在变量访问的位置 引用值 引用值则是比较大的对象 存放在堆(heap)中的对象 存储在变量处的值是一个指针(pointer),指向存储对象的内存处 所有引

weixin_49087505的博客 324

JS的原始值和引用值

目录Js原始值Js引用值 最近开始注重自己的基础知识,以前总是觉得自己什么都要会一点,不精也没关系,现在想想,感觉这种想法是错误的。一些最基本的基础底层知识还是要很扎实的。 Js原始值 原始值即一些代表原始数据类型的值,也叫基本数据类型,首先说一下js中有哪些原始值,Number,String,Boolean,Null,Undefined这些基本数据类型都是原始值。原始值存储在栈中。意思就是说,当一个原始变量把值赋给另一个原始变量时,只是把栈中的内容复制给另一个原始变量,此时这两个变量互不影响,即当一个变

weixin_54681929的博客 390

JavaScript 的原始值和引用值讲解

为大家准备了一个前端资料包。包含54本,2.57G的前端相关电子书,《前端面试宝典(附答案和解析)》,难点、重点知识视频教程(全套)。

军火库 697

JS 的值类型和引用类型(变量的原始值和引用值)

js 中的值类型和引用类型的不同点,及各自使用方法

weiweiliude2的专栏 1187

js原始值和引用值简单理解

js原始值和引用值的简单理解

qq_45601687的博客 327

JavaScript(一)主要内容:原始值和引用值

浏览器组成:shell部分(外壳部分)、内核部分(渲染引擎、js引擎、其他) 主流浏览器: 内核: IE trident Chrome Webkit/blink(2014年) ...

Deng_dan_wen的博客 476

JavaScript 原始值和引用值在变量复制时的异同

JavaScript 变量可以保存两种类型的值:原始值和引用值。原始值和引用值有以下特点。 原始值:大小固定,因此保存在栈内存上;从一个变量到另一个变量复制原始值会创建该值的第二个副本;typeof 操作符可以确定值的原始类型。引用值:是对象,存储在堆内存上;包含引用值的变量实际上只包含指向相应对象的一个指针,而不是对象本身。 从一个变量到另一个变量复制引用值只会复制指针,因此结果是两个变量都指向同一个对象;而 instanceof 操作符用于确保值的引用类型。

jyn15159的博客 955

你真的知道Javascript原始值和引用值吗

Javascript原始值和引用值

小天才程序员的博客乐园 4899

【JavaScript】深度详细理解原始值类型和引用值类型

深度理解原始值类型和引用值类型数据类型基本数据类型引用值类型特点栗子栗子在内存中的存储复制总结 数据类型 基本数据类型 String Number Boolean Null Undefined Symbol 引用值类型 Object Array Function … 前五个是ES5之前的,第六个是ES6之后出现的。引用数据类型如果不太严谨的来说,几乎全是引用数据类型,也就是一切皆对象。 因为JavaScript语言,本就是一个趋向面向对象的脚本语言,可以看出,它受Java的影响很深,借鉴了Java

GY的博客 1618

JS中原始值和引用值分析

JS中变量中两种类型的值:原始值,引用值 原始值是存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。 var x = 1; //1就是一个原始值,变量x中存放的就是原始值本身1 引用值是存储在堆中的对象,这个时候变量中存放的是对象的指针,指向对象的内存空间。(注意引用值是一个对象,并不是一个指针) var o = {}; //{}这个对象是一个引用值,注意...

happyCoding1024的博客 1195
上一篇: css居中的总结
下一篇: js 数据类型转换
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值