1. 在JavaScript中, 变量可以存在两种类型的值, 即原始值和引用值。

2. 原始值

2.1. 存储在栈(stack)中的简单数据段, 也就是说, 它们的值直接存储在变量访问的位置。

2.2. JavaScript有5种原始类型(primitive type), 即Undefined、Null、Boolean、Number和String。

var a = undefined;
var b = null;
var c = true;
var d = false;
var e = 1;
var f = 'abc';

2.3. typeof运算符对于null值会返回"Object"。这实际上是JavaScript最初实现中的一个错误。现在, null被认为是对象的占位符, 但从技术上来说, 它仍然是原始值。

3. 引用值

3.1. 存储在堆(heap)中的对象, 也就是说, 存储在变量处的值是一个指针(point), 指向存储对象的内存处。

var a = new String('abc');
var b = new Number(1);
var c = new Boolean(true);
var d = ['abc', 1, true, false];
var e = new Array();
var f = {id: 1001, name: 'zs', age: 18};
var g = new Object();

4. JavaScript程序是解释执行的。

5. JavaScript的解释程序必须判断该值是原始类型, 还是引用类型。要实现这一点, 解释程序则需尝试判断该值是否为 ECMAScript 的原始类型之一, 即 Undefined、Null、Boolean、Number和String 型。由于这些原始类型占据的空间是固定的, 所以可将他们存储在较小的内存区域栈中。这样存储便于迅速查寻变量的值。

6. 在许多语言中, 字符串都被看作引用类型, 而非原始类型, 因为字符串的长度是可变的。JavaScript打破了这一传统, 它是唯一没有固定大小的原始类型。

7. 如果一个值是引用类型的, 那么它的存储空间将从堆中分配。由于引用值的大小会改变, 所以不能把它放在栈中, 否则会降低变量查寻的速度。相反, 放在变量的栈空间中的值是该对象存储在堆中的地址。地址的大小是固定的, 所以把它存储在栈中对变量性能无任何负面影响。

8. 原始值和引用值的堆栈分配

012_原始值和引用值相关推荐

  1. 原始值和引用值类型及区别

    javascript中原始值和引用值类型及区别 首先原始值和引用值类型都是我们JS中的数据类型,为了充分利用存储空间,定义了不同的数据类型,而且我们JS是弱类型,动态语言,数据类型可变. 原始值(简单 ...

  2. 【JS】原始值与引用值、执行上下文与作用域链、作用域链增强、变量声明、标识符查找

    1.原始值与引用值 EcmaScript变量可以包含两种不同类型的数据:原始值.引用值 原始值:最简单的数据 引用值:由多个值构成的对象 六种原始值: Undefined Null Boolean N ...

  3. JavaScript检测原始值、引用值、属性

    上周写过一篇读书笔记<编写可维护的JavaScript>之编程实践,其中 第8章 避免『空比较』是博主在工作中遇坑较多的雷区,所以特此把该章节重新整理分享,希望大家不再坑队友(>﹏& ...

  4. C++/C++11中左值、左值引用、右值、右值引用的使用

    C++的表达式要不然是右值(rvalue),要不然就是左值(lvalue).这两个名词是从C语言继承过来的,原本是为了帮助记忆:左值可以位于赋值语句的左侧,右值则不能. 在C++语言中,二者的区别就没 ...

  5. 左值、右值、左值引用、右值引用

    1. 左值 左值(lvalue,left value),顾名思义就是赋值符号左边的值,可以取地址.准确来说,左值是表达式(不一定是赋值表达式)后依然存在的持久对象. 可以将左值看作是一个关联了名称的内 ...

  6. ES5-3 循环、引用值初始、显示及隐式类型转换

    1. 循环 for循环的三个参数abc,a只执行一次,c在每次循环后执行 // 打印0-100的质数 1不是质数 var list = [2] for (var i = 3; i <= 100; ...

  7. js值的拷贝和值的引用_到达P值的底部:直观的解释

    js值的拷贝和值的引用 介绍 (Introduction) Welcome to this lesson on calculating p-values. 欢迎参加有关计算p值的课程. Before ...

  8. 引用js_js值和引用

    值和引用 在许多编程语言中,赋值和参数传递可以通过值复制或者引用复制来完成,这取决于我们使用什么语法. 例如,在 C++ 中如果要向函数传递一个数字并在函数中更改它的值,就可以这样来声明参 数 int ...

  9. 回归本源:JavaScript 之中的值和引用

    阅读花费时间:2分钟 这是一个非常简短的值和引用的解释. 首先,对于每一个JavaScript开发者来说,值(value)和引用(reference)的定义,一般是从一些bug被引出的,而且在面试中也 ...

最新文章

  1. python学习之调试 错误捕捉及处理
  2. mtk处理器和骁龙对比_高通正在开发全新AR/VR处理器骁龙XR2;骁龙865对比骁龙855 Plus/苹果A13:爆料称性能增加20%...
  3. 安卓APP_ 控件(6)—— Notification通知
  4. 年底了,给想进阶的的前端朋友一些福利
  5. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 5 章 数据定义_5.5. 修改表
  6. idea创建maven程序_使用Maven程序集创建漏洞评估工件
  7. Facebook再次发生全球性宕机
  8. Fragment懒加载预加载
  9. 疫情期间天天对你“开枪”的额温枪,你知道它的工作原理吗?| 原力计划
  10. 云服务器如何重新引导,重新启动server服务器
  11. php validate验证用户,PHP validate 数据验证demo
  12. 学习笔记-数据结构与算法之线性表
  13. 多行文字或者单行文字的垂直居中解决方案
  14. 关于docker容器中,外网访问阿里云服务器中tomcat,报404错误的解决方法
  15. 网络和浏览器相关笔记
  16. 什么是数据工程师,数据工程师主要是做什么的?
  17. SQLite管理软件 - SQLiteSpy
  18. 瀚高数据库故障诊断指导方案
  19. 登录超时连不上信息服务器,我的侠客进不去怎么办 服务器登录连接超时请稍后再试解决方法...
  20. wow服务器合并信息,《魔兽世界》台服合并部分服务器_网络游戏魔兽世界_新浪游戏_新浪网...

热门文章

  1. OpenStack collectd的从零安装服务端
  2. 关于ubuntu-12.04.4-server-i386安装的问题
  3. SDN协议与SD-WAN中使用的协议相比有何差别?
  4. GEO数据下载及处理详细过程
  5. CocoaPod 使用之后知后觉
  6. GitHub 远程仓库 de 第一次配置
  7. AES加密补位填充的一个问题
  8. Git使用学习笔记 (一)
  9. 推荐:浏览器是怎样工作的?
  10. Linux编辑器vi使用方法详细介绍