• 对于JS的变量这个环节,其实主要要了解一下JS数据类型的存储方法
  • JS有两种不同的数据类型:基本类型(原始类型),引用类型(对象类型)。

  1.栈 (stack) 和 堆 (heap)

   (stack)栈会自动分配内存空间,由系统进行释放,用来存放基本数据类型 [ 数字(Number)、字符串(String)、布尔(Boolean)、空(Null)、未定义(Undefined)]  ,占据固定的大小的空间,是一种先进后出的数据结构。

       堆 (heap)堆是基于散列算法的数据结构,每创建一个新的对象,在堆内存中开辟一片新的空间;动态分配的内存,大小不确定,也不会自动进行释放; 生命周期由虚拟机的垃圾回收算法来决定;


  

2.JavaScript 数据类型 (基本数据类型,引用数据类型)

    基本数据类型(5种) 数字(Number)、字符串(String)、布尔(Boolean)、空(Null)、未定义(Undefined);直接按值

       【存放在栈内存中的简单数据段,数据大小确定,内存空间大小也确定】

      引用数据类型Array,Object;【存放在堆内存的对象,变量保存的是一个指针,空间大小不一样】


 

 3.图解 数据类型的存储方式

  基本数据类型的值是直接存在栈内存中,值与值直接是相互独立的,修改其中的一个变量不会对其他变量进行影响;

  引用数据类型的值是保存在堆内存中,每创建一个新的对象,就在堆内存中开辟一个新的空间,变量保存的事对象的内存地址(对象的引用),相同变量保存相同的对象的时候会影响值的改变;

   引用类型的存储需要内存的栈区和堆区(堆区是指内存里的堆内存)共同完成,栈区内存保存变量标识符和指向堆内存中该对象的指针,也可以说是该对象在堆内存的地址。

简言之: 基本数据类型的值直接保存在栈内存;引用类型的变量标识和指针保存在栈内存,引用类型的对象保存在堆内存的地址;

      var name = '小花';
var age = 10;
var test;
var arr = [1,2,3];
var obj = {age:10};

      通过图形表示基本数据类型和引用数据类型在内存中的存储情况:

       name,age,test三种基本数据类型是直接存储在栈内存中;

       arr,obj在栈内存中只是存储了一个地址来表示在堆内存中的引用;

  

var a=[1,2,3];
var b=a; //传地址,对象中传给变量的数据是引用类型,存储在堆内存中
b[0]=20; //b改变 会影响a的值的改变,因为他们指向的是同一个对象;
console.log(a[0]);//20;

注意:b只是拥有了一个不同名的‘指针’,去指向在堆内存中的对象;并不是直接赋堆内存的对象,所以b改变也会改变的a的数值;所以b修改的时候,会根据地址回到a堆中修改,c则直接在栈中修改,并且不能指向a堆内存中。

当b清空的值时,只是断开该变量与对象的联系,另一个对象并不受影响


  

 4.数据类型的比较

  • 比较两个基本数据类型的时候是对值之间的比较;
  • 比较两个引用数据类型的时候,是对象的内存地址比较;

    


注意: 引用数据类型的复制,就牵扯到 ‘浅拷贝’ 和 ‘深拷贝’ 的学习

1-JavaScript变量的更多相关文章

  1. javascript变量的作用域

    javascript变量的作用域 基本类型和引用类型 基本类型值指的是简单的数据段,而引用类型值指的是那个可能由多个值组成的对象  讲一个值赋值给变量时,javascript解析器首先要确定是基本类型 ...

  2. JavaScript 变量声明提前

    <JavaScript权威指南>中指出:JavaScript变量在声明之前已经可用,JavaScript的这个特性被非正式的称为声明提前(hoisting),即JavaScript函数中声 ...

  3. JavaScript 变量

    一,JavaScript 变量(存储信息的容器) 与代数一样,JavaScript 变量可用于存放值(比如 x=2)和表达式(比如 z=x+y). 变量可以使用短名称(比如 x 和 y),也可以使用描 ...

  4. javascript变量声明 及作用域

    javascript变量声明提升(hoisting) http://openwares.net/js/javascript_declaration_hoisting.html 可能要FQ一下 java ...

  5. JavaScript 变量作用域

    一. 变量声明 变量用var关键字来声明,如下所示: 变量在未声明的情况下被初始化,会被添加到全局环境. JavaScript执行代码时,会创建一个上下文执行环境,全局环境是最外围的环境.每个函数在被 ...

  6. 【转】javascript变量声明 及作用域

    javascript变量声明提升(hoisting) javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面. 先看 ...

  7. JavaScript变量和数据类型

    变量 变量就是一个元素,类似于数学中的概念,用来指定表示一个对象.在JavaScript中,用来指定变量的关键字为var.当声明新变量时,可以使用关键词 "new" 来声明其类型 ...

  8. 回归基础: JavaScript 变量提升

    from me: javascript的变量声明具有hoisting机制,它是JavaScript一个基础的知识点,也是一个比较容易犯错的点,平时在开发中,大大小小的项目都会遇到. 它是JavaScr ...

  9. JavaScript - 变量,作用域,内存

    JavaScript 变量可以用来保存两种类型的值:基本类型值和应用类型值.基本类型的值源自以下5种基本数据类型:Undefined.Null.Bollean.Number和String. 所有变量都 ...

  10. 六天玩转javascript:javascript变量与表达式(2)

    本系列内容为本人平时项目实践和参照MDN,MSDN,<javascript语言精粹>,<Effective Javascript>等资料,并且整理自己EverNote的日常积累 ...

随机推荐

  1. windows nginx 快捷启动关闭批处理脚本

    :: 关闭回显,即执行本脚本时不显示执行路径和命令,直接显示结果 @echo off rem @author luwuer color f8 set NGINX_DIR=D:\nginx-1.12.2 ...

  2. Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)

    授权模式改造成了Authorization code完成了改造的同时也实现了SSO.微服务环境下的前后端分离的单点登陆. 把admin的服务重启.刷新页面 并没有让我去登陆,直接就进入了首页. ord ...

  3. 【Linux】采用nginx反向代理让websocket 支持 wss

    背景:玩swoole 服务 使用Nginx反向代理解决wss问题. 即客户端通过wss协议连接 Nginx 然后 Nginx 通过ws协议和server通讯. 也就是说Nginx负责通讯加解密,Ngi ...

  4. [Sklearn] Linear regression models to fit noisy data

    Ref: [Link] sklearn各种回归和预测[各线性模型对噪声的反应] Ref: Linear Regression 实战[循序渐进思考过程] Ref: simple linear regre ...

  5. 转 zabbix 优化方法 以及数据库查询方法 两则

    ###########sample 1 https://www.cnblogs.com/hanshanxiaoheshang/p/10304672.html (不错) 如何从zabbix server ...

  6. 报错:Error starting Jetty. JSON Metrics may not be available.java.net.BindException:地址已在使用

    报错背景: 刚在CDH中集成Flume插件,启动报错 报错现象: Error starting Jetty. JSON Metrics may not be available. java.net.B ...

  7. DEBUG技巧1 SE37将参数保存为测试数据

    1. SE37调试函数的时候,将参数保存为测试数据,供下次调试使用, 或者参考标准的赋值进行赋值 2. SE37 ->执行-> 测试序列 测试函数: CO_XT_COMPONENTS_DE ...

  8. Python - Django - 模板语言之 Filters(过滤器)

    通过管道符 "|" 来使用过滤器,{{ value|过滤器:参数 }} Django 的模板语言中提供了六十个左右的内置过滤器 urls.py: from django.conf. ...

  9. 【NANO】引脚说明

    http://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=489650&page=1

  10. 【分布式一致性】etcd

    etcd: https://jimmysong.io/kubernetes-handbook/concepts/etcd.html 什么是 分布式一致性: http://thesecretliveso ...