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. oracle 中的几天后,几年后
  2. Linux命令 — 设置或查看网络配置命令ifconfig
  3. P1297-[国家集训队]单选错位【期望概率】
  4. URLshorting网址短链接PHP源码 开源源码
  5. 面试时会经常遇到的经典算法
  6. views.py视图函
  7. 有效集法(Active Set),内点法(Interior-Point)及序列二次规划(SQP)法
  8. ExMobi移动应用平台 烽火星空引领企业移动信息化
  9. 利用华为ENSP模拟器分析和配置中小型企业网络的综合实验(上)
  10. 每天有8千人在逃离北上广!扎心不?
  11. storyboard(故事版)新手教程 图文详解 2.为无约束的故事版添加约束
  12. 17.11.25B组总结
  13. stm32_GPIO模拟I2c读写EEPROM
  14. Java 银联云闪付对接记录
  15. B站到处投资,股价暴跌两位数
  16. Android工程师成长路线
  17. 迅雷看看 V4.9.14.2052绿色版 - 高清在线影院
  18. 【opencv3 学习记录】第八章 颜色空间转换
  19. ipfs 云服务器_吴川ipfs存储营销,IPFS
  20. 2023 全球人工智能开发者先锋大会—AI 人才学习赛rank1方案分享

热门文章

  1. 简单配置jena在eclipse的开发环境
  2. Mysql 於lampp xampp LinuxUbuntu下的配置
  3. 两次include一个文件的问题
  4. execl中一串字符,以某个分隔符分开,公式实现
  5. CentOS5.6配置salt节点minion
  6. 关于虚拟机vmware共享虚拟网卡上网
  7. cacti 安装过程笔记
  8. PHP对表单提交特殊字符的过滤和处理
  9. 广域网设备:远程路由器/交换机/服务器—Vecloud
  10. Orchard: Shape展现介绍