彻底搞懂JS中的数据类型

你有多忽视Jet Pack,使用的时候你就会觉得有多香 JetPack什么是JetPackJetPack常用工具架构组件行为组件实践案例JetCompose又是什么(暂时作为了解,kotlin用不熟伤不起)? 什么是JetPack 先附上官网:https://developer.android.com/jetpack 期待解决的问题: 遵循最佳做法:Android Jetpack 组件采用最新的设计方法构建,具有向后兼容性,可以减少崩溃和内存泄露。 消除样板代码:Android Jetpack 可以管理各种繁琐的 Activity(如后台任务、导航和生命周期管理 阅读详情

基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象。

1、常见的基本数据类型:

 Number、String 、Boolean、Null和Undefined。基本数据类型是按值访问的,因为可以直接操作保存在变量中的实际值。示例:

  var a = 10;

  var b = a;

  b = 20;

  console.log(a); // 10值

  上面,b获取的是a值得一份拷贝,虽然,两个变量的值相等,但是两个变量保存了两个不同的基本数据类型值。

  b只是保存了a复制的一个副本。所以,b的改变,对a没有影响。

  下图演示了这种基本数据类型赋值的过程:

2、引用类型数据:

  也就是对象类型Object type,比如:Object 、Array 、Function 、Data等。

  javascript的引用数据类型是保存在堆内存中的对象。

  与其他语言的不同是,你不可以直接访问堆内存空间中的位置和操作堆内存空间。只能操作对象在栈内存中的引用地址。

  所以,引用类型数据在栈内存中保存的实际上是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存中堆内存中的对象。

  var obj1 = new Object();

  var obj2 = obj1;

  obj2.name = "我有名字了";

  console.log(obj1.name); // 我有名字了

  说明这两个引用数据类型指向了同一个堆内存对象。obj1赋值给onj2,实际上这个堆内存对象在栈内存的引用地址复制了一份给了obj2,

  但是实际上他们共同指向了同一个堆内存对象。实际上改变的是堆内存对象。

  下面我们来演示这个引用数据类型赋值过程:

3、总结区别

  a 声明变量时不同的内存分配: 

  1)原始值:存储在栈中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。

    这是因为这些原始类型占据的空间是固定的,所以可将他们存储在较小的内存区域 – 栈中。这样存储便于迅速查寻变量的值。

  2)引用值:存储在堆中的对象,也就是说,存储在变量处的值是一个指针(point),指向存储对象的内存地址。

     这是因为:引用值的大小会改变,所以不能把它放在栈中,否则会降低变量查寻的速度。相反,放在变量的栈空间中的值是该对象存储在堆中的地址。

     地址的大小是固定的,所以把它存储在栈中对变量性能无任何负面影响。

  b 不同的内存分配机制也带来了不同的访问机制   

  1)在javascript中是不允许直接访问保存在堆内存中的对象的,所以在访问一个对象时,

    首先得到的是这个对象在堆内存中的地址,然后再按照这个地址去获得这个对象中的值,这就是传说中的按引用访问。

  2)而原始类型的值则是可以直接访问到的。

  

  c 复制变量时的不同  

  1)原始值:在将一个保存着原始值的变量复制给另一个变量时,会将原始值的副本赋值给新变量,此后这两个变量是完全独立的,他们只是拥有相同的value而已。

  2)引用值:在将一个保存着对象内存地址的变量复制给另一个变量时,会把这个内存地址赋值给新变量,

    也就是说这两个变量都指向了堆内存中的同一个对象,他们中任何一个作出的改变都会反映在另一个身上。

    (这里要理解的一点就是,复制对象时并不会在堆内存中新生成一个一模一样的对象,只是多了一个保存指向这个对象指针的变量罢了)。多了一个指针。

 

  d 参数传递的不同(把实参复制给形参的过程) 

  首先我们应该明确一点:ECMAScript中所有函数的参数都是按值来传递的。

  但是为什么涉及到原始类型与引用类型的值时仍然有区别呢?还不就是因为内存分配时的差别。  

  1)原始值:只是把变量里的值传递给参数,之后参数和这个变量互不影响。

  2)引用值:对象变量它里面的值是这个对象在堆内存中的内存地址,这一点你要时刻铭记在心!

    因此它传递的值也就是这个内存地址,这也就是为什么函数内部对这个参数的修改会体现在外部的原因了,因为它们都指向同一个对象。

 最后再用白话来通俗易懂的描述一下把。

你家在小区里,这个小区就相当于堆,

你家里有台冰箱,冰箱就相当于引用类型的值,

身份证上有你家的地址小区101楼,身份证就相当于栈,

小区101楼就相当于引用地址。

你要买台电视,就相当于改变引用类型的值,

但如果你不把地址告诉卖家,卖家就无法给你派送电视,这就相当于在JS不允许直接访问保存在堆内存中的对象,

你得把你家地址告诉卖家,卖家才能派送,这就相当于通过引用地址才能访问到堆内的变量,

此时,小区101楼里面有一台冰箱和一台电视。通过你在淘宝登记的地址找到你家,发现冰箱和电视,通过你身份证的地址找到你家,发现的也是冰箱和电视,这就相当于你无论通过哪个地址改变的数据,另一个地址的数据也会被改变。

你印了很多名片,但你家只有一个,这就相当于你复制的知识引用地址,这个地址相当于一个指针,指向去你家的路。

【Mode】Mode expansion monitors 对于宽带仿真,因为被支持的模式可能是波长的函数,因此,推荐在波长范围内增加频率的采样点数量去计算支持的波导模式分布或者光纤模式分布。对于宽带仿真,如果在被计算模式上的频率点的数量与通过 frequency-domain monitors 被测量的频率点的数量不匹配,这种情况是正常的。Mode expansion monitors 对于仿真偏振转换器是十分有用的,比如,在偏振转换器中,当你想要提取从输入模式到输出模式的转换效率,或者提取一个装置的 S 参数。给出了进入到被选择模式中的合透射率, 阅读详情

相关推荐

演化计算(蚁群算法、粒子群算法、遗传算法、演化规则......)

演化算法1.概念2.解决的问题 1.概念 传统算法(如梯度下降法、爬山法)根据导数的性质决定迭代的方向;而演化计算是一组解在一起协同作用产生一个最优解。 2.解决的问题 预测优化:演化计算(蚁群算法、粒子群算法、遗传算法等) 解的聚散、多样性:通过多次聚散,尽快得出最优解(某个解不合要求,要能够发散出去) ...

dear_jing的博客 4162

JS判断数据是否为File类型

if(file instanceof File){ upData.append('file', file, file.name); }

yangwq的博客 1万+

RoboMaster电控入门:手把手教你用STM32CubeMX配置大疆C板CAN总线驱动GM6020电机

本文详细介绍了如何使用STM32CubeMX配置大疆C板CAN总线驱动GM6020电机,适用于RoboMaster电控入门。从硬件准备到CubeMX工程初始化,再到CAN过滤器配置和电机控制协议解析,手把手教你避开常见配置陷阱,实现精准控制。

weixin_42524762的博客 267

js中Date类型数据的处理

一、js中对data的格式化  /**          * js时间对象的格式化;          * eg:format="yyyy-MM-dd hh:mm:ss";           */          Date.prototype.format = function(format){          var o = {             "M+" :

雪斋 2243

基于RYU+Mininet的SDN校园网络实战:从零搭建虚拟化实验环境

本文详细介绍了如何利用RYU控制器和Mininet搭建SDN校园网络实验环境,从Ubuntu虚拟机准备到网络拓扑设计,再到关键网络功能实现。通过实战案例展示SDN在校园网络中的应用优势,包括简化配置、提升效率等,为网络工程师和学生提供了一套完整的虚拟化实验方案。

weixin_30872499的博客 456

Labview程序框架介绍

当掌握LabVIEW基础知识并达到,理解单个小型模块程序会相对轻松。而若想进一步探索大型程序,就必然需要了解程序框架相关内容。LabVIEW常用的程序架构包括等。在多年工作中,我接触过的众多高级工程师所开发的大型程序,基本都基于这些架构搭建。接下来,将为大家详细介绍这些框架。

Misterlhw的博客 4620

Javascript的Data类型

Date类型 以毫秒的格式计算当前时间到1970年1月1日的时间差 需要调用构造函数来创建一个日期对象 var now = new Date(); Date.now() 返回调用这个方法时的日期和时间:所以我们可以来检测doSomething用了多久时间 //取得开始时间 var start = Date.now(); //doSomething doSomething(); //取得停止时...

陈旭阳 2826

uniapp - 实现免费OCR文字识别方案,用户上传图片后进行扫描识别获取图片上的文字,uniApp纯前端做图片OCR识别——无需服务器进行OCR识别插件(不需要依赖任何SDK或第三方API服务)

uniapp实现orc识别免费的插件识别不花钱,无需第三方OCR文字识别API,uniApp拍照或者选择图片免费识别,纯前端不需要服务器,Uniapp提取图片上的文字,本地ocr识别技术,uni-app图片OCR识别文本,uniapp有没有免费的ocr识别组件,uniapp前端实现文字识别,身份证识别,营业执照识别 (兼容APP、H5、小程序 不需要任何SDK)跨端无SDK方案:Uniapp实现OCR文字,离线OCR识别,uniapp tesseract.js实现文字识别,uniapp文字识别无需依赖sdk

🏆 前端领域优质创作者 4250

彻底搞懂JS原始数据类型在堆栈内存中的存储模型

内存管理是 JavaScript 工程实践的基石,理解原始数据类型与引用类型在堆栈中的存储方式,是掌握变量赋值、函数传参、深拷贝与浅拷贝等核心机制的关键。在主流 JS 引擎中,原始类型的值直接存于栈内存,而对象等引用类型的实体存于堆内存,栈中仅保存其引用地址。这种设计平衡了性能与不可变语义,也决定了值传递与引用传递的本质区别。从内存模型出发,我们不仅能解释为什么修改对象会影响多个变量、为什么字符串拼接在循环中效率低下,还能指导内存泄漏排查、性能优化及安全编程。本文结合图解、Node.js 实操验证与常见踩坑

weixin_30737899的博客 274

NVIDIA Isaac GR00T N1 人形机器人强化学习入门教程(二)详细步骤

LeRobot 格式 1.1 加载数据集 要加载数据集,我们需要定义以下 3 项内容: 在数据中显示图像帧 我们还可以对 LeRobotSingleDataset 类中的数据进行一系列转换。下面展示了如何对数据进行转换。 现在看看应用转换后的数据有何不同。 例如,对状态和操作进行规范化和串联,对视频图像进行裁剪、调整大小和颜色抖动。 二、GR00T 推断 本教程介绍如何使用 GR00

2506_90492529的博客 3012

scratch绘制旋转彩球 2023年9月电子学会图形化编程scratch编程等级考试四级真题和答案解析

​ scratch绘制旋转彩球 2023年9月电子学会图形化编程Scratch等级考试四级真题 一、题目要求 1、准备工作 (1)删除小猫角色,从角色库选择Ball角色; (2)默认空白背景。 ​

青少年编程学习指导 1369

10分钟的时间,带你彻底搞懂JavaScript数据类型转换

本文详细介绍了js中的3种数据类型转换规则,以及有着许多坑的隐式类型转换,并且通过一些经典的案例让大家清楚的理解其转换规则。

~~~ 2094

Sigrity System SI Parallel Bus Analysis模式进行DDR3仿真分析操作指导-单个颗粒

Default Strobe Offset:DQS默认偏移时间,自动填充为0.5ns,即DQS默认偏移1/2UI,DQS滞后于DQ 1/2UI,让建立保持时间均分。WLO:写平衡偏移的数值,DataL是0ps,DataU是500ps,是根据WLOSkew自动定义的,可以认为是WLOSkew取整,也可以根据需要手动调整数值。注意AddCmd的UI=T,这里的Data Rate仍然是DQ的速率,并不是地址线的速率,地址线的速率=1/UI=1/2ns=0.5Gbps。

weixin_54787054的博客 366

「JavaScript深入」彻底搞懂JS原型与原型链

「JavaScript深入」彻底搞懂JS原型与原型链:原因、使用class实现继承、原型、原型链、prototype和proto

XH_jing的博客 1612

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

彻底搞懂 JavaScript 的基本数据类型,拿下面试官的核心提问!

在 JavaScript 中,“数据类型”不仅是语言基础,更是众多面试题背后的核心。基础扎实与否,直接影响你对变量存储、内存管理、数据传递等核心机制的理解。很多候选人以为自己“懂了”,一问就露馅儿。熟练掌握 JS 的基本数据类型,是你迈入前端开发的第一道门槛。JavaScript 的基本数据类型虽然属于入门知识,但贯穿在项目开发的每一个角落。理解数据类型,就是理解 JS 本质的第一步。面试中,如果你能答得出、讲得清、扩得深,不仅能展现你的基础功底,更能体现你对前端的系统性认知。建议你在准备时。

残影的博客 860

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

javascript这样学——彻底搞懂js数据类型,html标签元素类型

面试题千万不要死记,一定要自己理解,用自己的方式表达出来,在这里预祝各位成功拿下自己心仪的offer。需要完整面试题的朋友可以点击蓝色字体免费获取记,一定要自己理解,用自己的方式表达出来,在这里预祝各位成功拿下自己心仪的offer。需要完整面试题的朋友可以点击蓝色字体免费获取[外链图片转存中…(img-vcj6YxWn-1712124123765)][外链图片转存中…(img-UJ2ujwZO-1712124123765)][外链图片转存中…(img-JloMbVgv-1712124123765)]

2301_79098879的博客 930

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

76张脑图带你彻底搞懂原生JS

想自学JS吗?想提升JS底层原理吗?76张脑图带你彻底搞懂原生JS "不畏惧,不讲究,未来的日子好好努力"——大家好!我是小芝麻???? 在默默的更新了一段时间的文章后,小芝麻决定励志成为一个标题党???? 别走,别走,别走啊????..... 搞错了,下面我们正式开始; 本篇内容适用于:初学前端;及工作时间不久想回顾基础的各位伙伴; 文章主要由图片组成,看起来可能会不太方便,适合保存下来单张查看????; 既然来了,就看看在走吧,总会有些收获的????; 补充图片地址链

一个懒鬼的博客 898

还在被JavaScript数据类型搞糊涂?一篇文章帮你彻底搞懂!

JavaScript 的数据类型看似简单,但深入理解它们对于编写健壮、可靠的代码至关重要。基本数据类型和引用数据类型在存储、赋值和比较上的根本差异,是许多常见编程错误的根源。通过掌握typeofinstanceof和等类型判断方法,以及理解null和undefined的区别,你可以避免许多常见的陷阱。希望这篇文章帮助你彻底理解了 JavaScript 的数据类型。如果有任何问题或想法,欢迎在评论区留言讨论!

在0与1的裂缝里,种出AI的未来。 682

javascript这样学——彻底搞懂js数据类型,前端面试前端基础

本人分享一下这次字节跳动、美团、头条等大厂的面试真题涉及到的知识点,以及我个人的学习方法、学习路线等,当然也整理了一些学习文档资料出来是给大家的。知识点涉及比较全面,包括但不限于前端基础,HTML,CSS,JavaScript,Vue,ES6,HTTP,浏览器,算法等等CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】本人分享一下这次字节跳动、美团、头条等大厂的面试真题涉及到的知识点,以及我个人的学习方法、学习路线等,当然也整理了一些学习文档资料出来是给大家的。

2401_83973995的博客 912

javascript这样学——彻底搞懂js数据类型

数据类型 js是动态类型语言,变量的数据类型可以随时被改变,主要分为基本类型和引用类型两种。javascript的引擎一般是c/c++开发的,我们不用太多关注堆(stack)和栈(heap)的概念,但也可以简单了解一下。 基本类型 基本类型是按值访问的,数据存储在栈中。 String:字符串 Number:数字 Boolean:布尔 Null:空,一般我们会用null来释放引用类型数据所占用的内...

前端原创分享,常年坚持记录和分享,全网阅读量超百万 388

JavaScript 的基石:彻底搞懂 8 种数据类型

类别类型列表存储位置比较方式典型检测基本类型栈 (Stack)比值typeof引用类型Object (含 Array, Function, Date 等)堆 (Heap)比地址instanceoftoString🚀 博主寄语数据类型是 JavaScript 的地基。很多奇怪的 Bug(比如修改了一个数组,另一个数组也变了;或者if (data)判断失效)都源于对类型理解不够深入。记住口诀七种基本存栈间,值拷贝来互不连。引用对象堆里站,地址传递牵一线。

weixin_64684095的博客 587

【从头学前端】04-搞懂JavaScript中的基本数据类型

Hello 大家好,我是彼岸繁華????,一个想进大厂的大三学生,为了有一个完整的前端知识体系,现在我要从头开始学习、梳理、总结。 本系列文章在掘金首发,编写不易转载请获得允许 写在前面 本篇文章我们将来学习JavaScript中的基础数据类型,阅读本篇文章你可以掌握如下内容 什么是数据类型 概述 在上一篇文章【从头学前端】03-这次我就搞懂了JavaScript中的变量中我们知道了变量是用来存储数据信息的,我们把这些被存储的数据信息进行不同类别的划分,这些不同的数据类别就被称为数据类型 。 由于J

一碗周 229

彻底搞懂 JS 数据类型:基本类型与引用类型的核心差异

JavaScript数据类型分为基本类型(Number、String等)和引用类型(Object、Array等),核心差异在于内存存储方式不同。基本类型直接存储在栈内存,赋值时复制实际值,变量间互不影响;引用类型实际值存在堆内存,变量存储引用地址,赋值时复制地址,变量共享同一对象。这种设计优化了性能,但可能导致修改互相影响。可通过深拷贝(如JSON序列化或递归复制)解决共享问题。理解这一机制是掌握原型链、闭包等概念的基础。

m0_61594728的博客 954

彻底搞懂JS中的的隐式类型转换

看到一篇好文(https://juejin.im/post/5d43bcb36fb9a06b2f5f920f),评论区还有高手打架,旁观者收益不少,因此总结一发。 如果== 两侧是不同类型的值,则会引发隐式类型转换。那么转换的规则是什么?什么时候是true或false呢? 记住下面几条转换规则,妈妈再也不担心我懵逼 规则一:若字符串和数字进行比较,那么字符串转数字。 '0'...

landiyaaa的博客 227

彻底搞懂JS闭包各种坑

彻底搞懂JS闭包各种坑 https://www.jianshu.com/p/26c81fde22fb 闭包是js开发惯用的技巧,什么是闭包?闭包指的是:能够访问另一个函数作用域的变量的函数。清晰的讲:闭包就是一个函数,这个函数能够访问其他函数的作用域中的变量。eg: function outer() { var a = '变量1' var inne...

wwf1225的博客 212

彻底搞懂JavaScript原型和原型链

JavaScript是基于原型编程,创建对象是通过克隆对象的形式,不是通过类创建。函数都拥有prototype原型属性,实例化对象的__proto__属性指向这个原型属性,对象可以直接调用原型对象的方法和属性,不用写__proto__再调用,两者效果一致。对象的__proto__指向构造函数的prototype,构造函数的prototype同样是对象,其__proto__指向上一层原型对象,直到,形成原型链。

程序员李林 1133
上一篇: 为什呢vue组件中的data必须是函数?
下一篇: vue中$set的使用场景
微  光
博客等级 码龄9年 836粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值