012_原始值和引用值
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_原始值和引用值相关推荐
- 原始值和引用值类型及区别
javascript中原始值和引用值类型及区别 首先原始值和引用值类型都是我们JS中的数据类型,为了充分利用存储空间,定义了不同的数据类型,而且我们JS是弱类型,动态语言,数据类型可变. 原始值(简单 ...
- 【JS】原始值与引用值、执行上下文与作用域链、作用域链增强、变量声明、标识符查找
1.原始值与引用值 EcmaScript变量可以包含两种不同类型的数据:原始值.引用值 原始值:最简单的数据 引用值:由多个值构成的对象 六种原始值: Undefined Null Boolean N ...
- JavaScript检测原始值、引用值、属性
上周写过一篇读书笔记<编写可维护的JavaScript>之编程实践,其中 第8章 避免『空比较』是博主在工作中遇坑较多的雷区,所以特此把该章节重新整理分享,希望大家不再坑队友(>﹏& ...
- C++/C++11中左值、左值引用、右值、右值引用的使用
C++的表达式要不然是右值(rvalue),要不然就是左值(lvalue).这两个名词是从C语言继承过来的,原本是为了帮助记忆:左值可以位于赋值语句的左侧,右值则不能. 在C++语言中,二者的区别就没 ...
- 左值、右值、左值引用、右值引用
1. 左值 左值(lvalue,left value),顾名思义就是赋值符号左边的值,可以取地址.准确来说,左值是表达式(不一定是赋值表达式)后依然存在的持久对象. 可以将左值看作是一个关联了名称的内 ...
- ES5-3 循环、引用值初始、显示及隐式类型转换
1. 循环 for循环的三个参数abc,a只执行一次,c在每次循环后执行 // 打印0-100的质数 1不是质数 var list = [2] for (var i = 3; i <= 100; ...
- js值的拷贝和值的引用_到达P值的底部:直观的解释
js值的拷贝和值的引用 介绍 (Introduction) Welcome to this lesson on calculating p-values. 欢迎参加有关计算p值的课程. Before ...
- 引用js_js值和引用
值和引用 在许多编程语言中,赋值和参数传递可以通过值复制或者引用复制来完成,这取决于我们使用什么语法. 例如,在 C++ 中如果要向函数传递一个数字并在函数中更改它的值,就可以这样来声明参 数 int ...
- 回归本源:JavaScript 之中的值和引用
阅读花费时间:2分钟 这是一个非常简短的值和引用的解释. 首先,对于每一个JavaScript开发者来说,值(value)和引用(reference)的定义,一般是从一些bug被引出的,而且在面试中也 ...
最新文章
- oracle 中的几天后,几年后
- Linux命令 — 设置或查看网络配置命令ifconfig
- P1297-[国家集训队]单选错位【期望概率】
- URLshorting网址短链接PHP源码 开源源码
- 面试时会经常遇到的经典算法
- views.py视图函
- 有效集法(Active Set),内点法(Interior-Point)及序列二次规划(SQP)法
- ExMobi移动应用平台 烽火星空引领企业移动信息化
- 利用华为ENSP模拟器分析和配置中小型企业网络的综合实验(上)
- 每天有8千人在逃离北上广!扎心不?
- storyboard(故事版)新手教程 图文详解 2.为无约束的故事版添加约束
- 17.11.25B组总结
- stm32_GPIO模拟I2c读写EEPROM
- Java 银联云闪付对接记录
- B站到处投资,股价暴跌两位数
- Android工程师成长路线
- 迅雷看看 V4.9.14.2052绿色版 - 高清在线影院
- 【opencv3 学习记录】第八章 颜色空间转换
- ipfs 云服务器_吴川ipfs存储营销,IPFS
- 2023 全球人工智能开发者先锋大会—AI 人才学习赛rank1方案分享