JS中原始值和引用值分析
2024-10-19 09:47:35
JS中变量中两种类型的值:原始值,引用值
- 原始值是存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。
var x = 1; //1就是一个原始值,变量x中存放的就是原始值本身1
- 引用值是存储在堆中的对象,这个时候变量中存放的是对象的指针,指向对象的内存空间。(注意引用值是一个对象,并不是一个指针)
var o = {}; //{}这个对象是一个引用值,注意变量o中并没有存放这个对象,而是存放的这个对象的指针
变量赋值过程
为变量赋值时,ECMAScript 的解释程序必须判断该值是原始类型,还是引用类型。要实现这一点,解释程序则需尝试判断该值是否为 ECMAScript 的原始类型之一,即 Undefined、Null、Boolean、Number 和 String 型。由于这些原始类型占据的空间是固定的,所以可将他们存储在较小的内存区域 - 栈中。这样存储便于迅速查寻变量的值。
在许多语言中,字符串都被看作引用类型,而非原始类型,因为字符串的长度是可变的。ECMAScript 打破了这一传统。
如果一个值是引用类型的,那么它的存储空间将从堆中分配。由于引用值的大小会改变,所以不能把它放在栈中,否则会降低变量查寻的速度。相反,放在变量的栈空间中的值是该对象存储在堆中的地址。==地址的大小是固定的,所以把它存储在栈中对变量性能无任何负面影响。==如下图所示:
总结
- 要注意对象的内容是存放在堆中的,但是它的指针(引用)是存放在栈中的,变量中存放的是它的指针而不是它的内容,通过这个指针可以访问这个对象。
- 访问的时候和c语言有一点不同,例如,在c语言中p中存放的是整型数组a的指针,那么要想访问这个数组的值需要在p前面加个*,表示要访问这个指针指向的内存空间里的内容。js中并不需要这样做,p中存放的是对象a的指针,那么要想访问这个对象直接利用p就可以了。
最新文章
- java中采用dom4j解析xml文件
- 浏览器 私有属性&;内核
- HDU3157 Crazy Circuits(有源汇流量有上下界网络的最小流)
- javaBean Request生命周期
- [WCF REST] Web消息主体风格(Message Body Style)
- 如何禁止scrollView 的子控件自动滑到 底部或者中间部分
- HDU 1849 Rabbit and Grass
- 初探Azure的保留实例(Reserved Instance)
- 深入浅出Java分布式系统通信
- 【一天一道LeetCode】#111. Minimum Depth of Binary Tree
- Java基础知识拾遗(二)
- RDD算子
- nexus3.14.0版本linux环境安装、启动、搭建私库
- golang解析json配置文件
- 日期函数、时间函数总结(MySQL 5.X)
- 程序员 &; 设计师都能用上的 75 份速查手册
- 开博缘由 , 可点下看看 http://www.cnblogs.com/jshare
- 编写优质嵌入式C程序(转)
- maven,阿里云国内镜像,提高jar包下载速度
- Animate a custom Dialog,自定义Dialog动画