背景
 
    一个经典的问题,先抛出来给大伙看看:

var a = "黑MAO";
var b = a;
var c = new Object();
var d = c;
a = "新黑MAO";
c.age = 24;
//打印出结果是怎么样的呢?
console.log(a, b, c, d);
 
    上面先把问题出来,经过本文的梳理,之后再回头看看这个过程。
 
JS有哪些数据类型?
 
    JS包含量大数据类型,一种是基本数据类型(String、Number、Boolean、undefined、null);另外一种是引用类型(Object)
 
数据的存储方式有哪些?
 
  • 栈区:存放函数的参数值,局部变量的值(先进后出)
  • 堆区:由程序员分配释放,分配方式类似链表(任意顺序)
  • 全局区: 全局变量和静态变量
  • 文字常量区: 常量
  • 程序代码区:函数二进制码
 
JS中的基础类型和引用类型是怎么存储的?
 
    基础类型的数据存储在栈区,举一个简单的例子
    

var name = "黑MAO";
function hello(user) {
console.log('hello ' + user);
}
hello(name);
//这里只关注变量的存储
 
key
value
name
黑MAO
user
undefined

引用类型的数据存储在堆区,举一个例子

 

var a = new Object();
//由于堆区类似个链表,所以就用链表简单的表示一下
 
key
value
a
对象A地址
 
对象A的值:Object{}
...

另:堆区存储的数据是通过地址查找值,而不遵循队列或者栈的出入顺序

 
回顾

    回头看看文章刚开始的时候,抛出的那个问题。可以根据上面讲到的存储方式,复现一下从创建到赋值的一个过程。

var a = "黑MAO";
var b = a;
var c = new Object();
var d = c;
 
栈区存储结构:    
key
value
a
黑MAO
b
黑MAO
c
对象C地址
d
对象C地址
堆区存储结构:
对象C的值:Object{}
...
...
 
a = "新黑MAO";
c.age = 24;
 
栈区存储结构:
key
value
a
新黑MAO
b
黑MAO
c
对象C地址
d
对象C地址
 

堆区存储结构:

对象C的值:Object{age : 24}
...
...
console.log(a, b, c, d);
//新黑MAO 黑MAO Object{age: 24} Object{age: 24}
 
总结
    
    理清一些过程,便于在写代码的时候,更加高效并且没有错误。随时整理,也防止自己忘记~    
 
 
参考资料:
 

浅谈JS数据类型存储问题的更多相关文章

  1. 浅谈js数据类型识别方法

    js有6种基本数据类型  Undefined , Null , Boolean , Number , String ,Symbol和一种引用类型Object,下面我们就来一一看穿,哦不,识别他们. t ...

  2. 浅谈js拖拽

    本文来自网易云社区 作者:刘凌阳 前言 本文依据半年前本人的分享<浅谈js拖拽>撰写,算是一篇迟到的文章. 基本思路 虽然现在关于拖拽的组件库到处都是,HTML5也把拖放纳入了标准.但考虑 ...

  3. 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂

    浅谈JS中的!=.== .!==.===的用法和区别   var num = 1;     var str = '1';     var test = 1;     test == num  //tr ...

  4. 浅谈JS中的闭包

    浅谈JS中的闭包 在介绍闭包之前,我先介绍点JS的基础知识,下面的基础知识会充分的帮助你理解闭包.那么接下来先看下变量的作用域. 变量的作用域 变量共有两种,一种为全局变量,一种为局部变量.那么全局变 ...

  5. 开发技术--浅谈python数据类型

    开发|浅谈python数据类型 在回顾Python基础的时候,遇到最大的问题就是内容很多,而我的目的是回顾自己之前学习的内容,进行相应的总结,所以我就不玩基础了,很多在我实际生活中使用的东西,我会在文 ...

  6. 浅谈JS之AJAX

    0x00:什么是Ajax? Ajax是Asynchronous Javascript And Xml 的缩写(异步javascript及xml),Ajax是使用javascript在浏览器后台操作HT ...

  7. 浅谈 js 正则字面量 与 new RegExp 执行效率

    原文:浅谈 js 正则字面量 与 new RegExp 执行效率 前几天谈了正则匹配 js 字符串的问题:<js 正则学习小记之匹配字符串> 和 <js 正则学习小记之匹配字符串优化 ...

  8. 浅谈 js 字符串之神奇的转义

    原文:浅谈 js 字符串之神奇的转义 字符串在js里是非常常用的,但是你真的了解它么?翻阅<MDN String>就可以了解它的常见用法了,开门见山的就让你了解了字符串是怎么回事. 'st ...

  9. 浅谈 js 正则之 test 方法

    原文:浅谈 js 正则之 test 方法 其实我很少用这个,所以之前一直没注意这个问题,自从落叶那厮写了个变态的测试我才去看了下这东西.先来看个东西吧. var re = /\d/; console. ...

随机推荐

  1. jQuery 各种选择器 $.()用法

    jQuery 元素选择器jQuery 使用 CSS 选择器来选取 HTML 元素. $("p") 选取 <p> 元素. $("p.intro") 选 ...

  2. win10 下安装、配置、启动mysql

    1.下载http://dev.mysql.com/downloads/mysql/ 2.Community > MySQL Community Server 3.Other Downloads: ...

  3. python标准库之字符编码详解

    codesc官方地址:https://docs.python.org/2/library/codecs.html 相关帮助:http://www.cnblogs.com/huxi/archive/20 ...

  4. text-overflow简单使用

    text-overflow属性配合overflow才有效果,还记得把文字强制一行显示,如下代码: <!DOCTYPE html> <html lang="zh-cn&quo ...

  5. Windows系统下nodejs安装及配置

    关于nodejs中文站,眼下活跃度最好的知识站应该是http://www.cnodejs.org/ ,而http://cnodejs.org/则活跃度较低.Express.js是nodejs的一个MV ...

  6. [CSAPP笔记][第十二章并发编程]

    第十二章 并发编程 如果逻辑控制流在时间上是重叠,那么它们就是并发的(concurrent).这种常见的现象称为并发(concurrency). 硬件异常处理程序,进程和Unix信号处理程序都是大家熟 ...

  7. 监控工具nagios

    Nagios 简介是一个开源软件,可以监控网络设备网络流量.Linux/windows主机状态,甚至可以监控打印机它可以运行在Linux上或windows上基于浏览器的web界面方便运维人员查看监控项 ...

  8. javascript构造函数+原形继承+作用域扩充

    目前为止我认为这是最佳的声明对象的模式,将今天学到的东西写下 <script type="text/javascript"> function Constructor( ...

  9. 再说重写IHttpHandler,实现前后端分离

    aspx页面第一次加载时,HttpHandler 里面是如何编译指定页面的呢?Framework提供了编译页面的API如下: BuildManager.CreateInstanceFromVirtua ...

  10. WndProc函数(转)

    WndProc函数作用: 主要用在拦截并处理系统消息和自定义消息 比如:windows程序会产生很多消息,比如你单击鼠标,移动窗口都会产生消息.这个函数就是默认的消息处理函数.你可以重载这个函数来制定 ...