JS中变量中两种类型的值:原始值,引用值
  1. 原始值是存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。
var x = 1; //1就是一个原始值,变量x中存放的就是原始值本身1
  1. 引用值是存储在堆中的对象,这个时候变量中存放的是对象的指针,指向对象的内存空间。(注意引用值是一个对象,并不是一个指针)
var o = {}; //{}这个对象是一个引用值,注意变量o中并没有存放这个对象,而是存放的这个对象的指针
变量赋值过程
  • 为变量赋值时,ECMAScript 的解释程序必须判断该值是原始类型,还是引用类型。要实现这一点,解释程序则需尝试判断该值是否为 ECMAScript 的原始类型之一,即 Undefined、Null、Boolean、Number 和 String 型。由于这些原始类型占据的空间是固定的,所以可将他们存储在较小的内存区域 - 栈中。这样存储便于迅速查寻变量的值。

  • 在许多语言中,字符串都被看作引用类型,而非原始类型,因为字符串的长度是可变的。ECMAScript 打破了这一传统。

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

总结
  • 要注意对象的内容是存放在堆中的,但是它的指针(引用)是存放在栈中的,变量中存放的是它的指针而不是它的内容,通过这个指针可以访问这个对象。
  • 访问的时候和c语言有一点不同,例如,在c语言中p中存放的是整型数组a的指针,那么要想访问这个数组的值需要在p前面加个*,表示要访问这个指针指向的内存空间里的内容。js中并不需要这样做,p中存放的是对象a的指针,那么要想访问这个对象直接利用p就可以了。

最新文章

  1. java中采用dom4j解析xml文件
  2. 浏览器 私有属性&内核
  3. HDU3157 Crazy Circuits(有源汇流量有上下界网络的最小流)
  4. javaBean Request生命周期
  5. [WCF REST] Web消息主体风格(Message Body Style)
  6. 如何禁止scrollView 的子控件自动滑到 底部或者中间部分
  7. HDU 1849 Rabbit and Grass
  8. 初探Azure的保留实例(Reserved Instance)
  9. 深入浅出Java分布式系统通信
  10. 【一天一道LeetCode】#111. Minimum Depth of Binary Tree
  11. Java基础知识拾遗(二)
  12. RDD算子
  13. nexus3.14.0版本linux环境安装、启动、搭建私库
  14. golang解析json配置文件
  15. 日期函数、时间函数总结(MySQL 5.X)
  16. 程序员 & 设计师都能用上的 75 份速查手册
  17. 开博缘由 , 可点下看看 http://www.cnblogs.com/jshare
  18. 编写优质嵌入式C程序(转)
  19. maven,阿里云国内镜像,提高jar包下载速度
  20. Animate a custom Dialog,自定义Dialog动画

热门文章

  1. 剖析nsq消息队列目录
  2. STDN: Scale-Transferrable Object Detection论文总结
  3. React躬行记(14)——测试框架
  4. 04-kubernetes 资源清单定义入门
  5. 一个http请求的详细过程
  6. R语言学习笔记(2)——数据结构与数据集
  7. django restful framework 一对多方向更新数据库
  8. JDK官方下载
  9. PAT甲级满分攻略|记一次考试经历
  10. Spring IOC容器装配Bean_基于XML配置方式