1-JavaScript变量

- 对于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变量的更多相关文章
- javascript变量的作用域
javascript变量的作用域 基本类型和引用类型 基本类型值指的是简单的数据段,而引用类型值指的是那个可能由多个值组成的对象 讲一个值赋值给变量时,javascript解析器首先要确定是基本类型 ...
- JavaScript 变量声明提前
<JavaScript权威指南>中指出:JavaScript变量在声明之前已经可用,JavaScript的这个特性被非正式的称为声明提前(hoisting),即JavaScript函数中声 ...
- JavaScript 变量
一,JavaScript 变量(存储信息的容器) 与代数一样,JavaScript 变量可用于存放值(比如 x=2)和表达式(比如 z=x+y). 变量可以使用短名称(比如 x 和 y),也可以使用描 ...
- javascript变量声明 及作用域
javascript变量声明提升(hoisting) http://openwares.net/js/javascript_declaration_hoisting.html 可能要FQ一下 java ...
- JavaScript 变量作用域
一. 变量声明 变量用var关键字来声明,如下所示: 变量在未声明的情况下被初始化,会被添加到全局环境. JavaScript执行代码时,会创建一个上下文执行环境,全局环境是最外围的环境.每个函数在被 ...
- 【转】javascript变量声明 及作用域
javascript变量声明提升(hoisting) javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面. 先看 ...
- JavaScript变量和数据类型
变量 变量就是一个元素,类似于数学中的概念,用来指定表示一个对象.在JavaScript中,用来指定变量的关键字为var.当声明新变量时,可以使用关键词 "new" 来声明其类型 ...
- 回归基础: JavaScript 变量提升
from me: javascript的变量声明具有hoisting机制,它是JavaScript一个基础的知识点,也是一个比较容易犯错的点,平时在开发中,大大小小的项目都会遇到. 它是JavaScr ...
- JavaScript - 变量,作用域,内存
JavaScript 变量可以用来保存两种类型的值:基本类型值和应用类型值.基本类型的值源自以下5种基本数据类型:Undefined.Null.Bollean.Number和String. 所有变量都 ...
- 六天玩转javascript:javascript变量与表达式(2)
本系列内容为本人平时项目实践和参照MDN,MSDN,<javascript语言精粹>,<Effective Javascript>等资料,并且整理自己EverNote的日常积累 ...
随机推荐
- sql 中 '' 与 null 的区别
SELECT * from t_company where content = '' SELECT * from t_company where content is null update t_co ...
- Oracle数据库查看表空间sql语句
转: Oracle数据库查看表空间sql语句 2018-09-03 15:49:51 兰海泽 阅读数 6212 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出 ...
- DEBUG技巧1 SE37将参数保存为测试数据
1. SE37调试函数的时候,将参数保存为测试数据,供下次调试使用, 或者参考标准的赋值进行赋值 2. SE37 ->执行-> 测试序列 测试函数: CO_XT_COMPONENTS_DE ...
- kafka删除topic后再创建同名的topic报错(ERROR org.apache.kafka.common.errors.TopicExistsException)
[hadoop@datanode3 logs]$ kafka-topics.sh --delete --zookeeper datanode1:2181 --topic firstTopic firs ...
- linux如何查看mysql是否启动
linux下有很多服务,今天就写一下如何查看服务是否启动,以mysql为例子 使用命令 # service mysqld status 或者 # service mysql status 命令来查看m ...
- web端自动化——Selenium3+python自动化(3.7版本)-chrome67环境搭建
前言 目前selenium版本已经升级到3.0了,网上的大部分教程是基于2.0写的,所以在学习前先要弄清楚版本号,这点非常重要.本系列依然以selenium3为基础. 一.selenium简介 Sel ...
- ConfigMap介绍
来源 ConfigMap API资源用来保存key-value pair配置数据,这个数据可以在pods里使用,或者被用来为像controller一样的系统组件存储配置数据.虽然ConfigMap跟S ...
- Nginx负载均衡-如何自定义URL中的hash key2
upstream backend1 { server 192.168.3.236:555; server 192.168.3.236:222; ...
- MySQL 过滤复制+复制映射 配置方法
场景 node1 和 node2 为两台不同业务的MySQL服务器.业务方有个需求,需要将node1上的 employees库的departments .dept_manager 这2张表同步到 no ...
- php实现文件与16进制相互转换
php实现文件与16进制相互转换 <pre><?php/** * php 文件与16进制相互转换 * Date: 2017-01-14 * Author: fdipzone * Ve ...