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的日常积累 ...
随机推荐
- 真正的能理解CSS中的line-height,height与line-height
https://blog.csdn.net/a2013126370/article/details/82786681 在最近的项目中,常常用到line-height,只是简单的理解为行高但并没有深层次 ...
- 手动卸载wine-stable卸载
装了wine发现运行TIM全都乱码,于是手动卸载wine: 删除文件:(参考https://blog.csdn.net/taizhoufox/article/details/5496568) ~/.w ...
- Labelme数据转mask_rcnn数据格式
labelme数据转mask_rcnn数据格式 # coding: utf-8 import argparse import json import os import os.path as osp ...
- ROS Software update
http://packages.ros.org/ros/ubuntu
- ubuntu 防火墙打开关闭
1.查看防火墙状态 sudo ufw status 2.打开防火墙 sudo ufw enable 3.关闭防火墙 sudo ufw disable
- 虚拟机设置静态ip【实测中标麒麟】
1.打开本机的网络共享中心,记住本机的网络描述 realtek RTL...... 2.右键当前虚拟机,设置桥接模式 3.在虚拟机上方选择编辑->虚拟机网络编辑器,桥接到第一步中的描述 4.修改 ...
- hadoop记录-flink测试
1.启动集群 bin/start-cluster.sh 2.jps查看进程 3.打开网页端(192.168.66.128:8081) 4.造数据:nc -lk 9000 5.执行./bin/flink ...
- 复习sql server 2000 MSDE2000 ,安装,打补丁,开1433端口。
前言: 由于工作需要,一个仍在使用的古董软件需要安装配置. 原有系统是在主机部署,单机安装sql2000,其他机器(分机)也单机部署软件,部署sql2000,通过dtsrun /f sync.dts( ...
- Andrew Ng机器学习课程10
Andrew Ng机器学习课程10 a example 如果hypothesis set中的hypothesis是由d个real number决定的,那么用64位的计算机数据表示的话,那么模型的个数一 ...
- 数据挖掘经典算法PrefixSpan的一个简单Python实现
前言 用python实现了一个没有库依赖的"纯" py-based PrefixSpan算法. Github 仓库 https://github.com/Holy-Shine/Pr ...