博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基本数据类型与引用数据类型的区别
阅读量:3933 次
发布时间:2019-05-23

本文共 1427 字,大约阅读时间需要 4 分钟。

  基本数据类型

存放在栈内存中的简单数据段,数据大小确定,内存大小空间可以分配。

基本数据类型有Number、String、Boolean、Undefined、Null

var a = 1;var b = a;var b = 2;console.log(a);   //1console.log(b);   //2

这个例子,相当于b只是a复制粘贴后的一个副本,对b的操作不会影响a的值。下图是该过程的示意图:

                           


引用数据类型

存放在堆内存中的对象的值,由地址指针组成,地址保存在栈内存中,值保存在堆内存中。堆内存中的内个空间大小不一样。当我们访问引用类型的值时,需要先从栈中获取该对象的指针,然后再从堆内存中获取所需的值。

不可以直接访问堆内存空间中的位置和操作堆内存空间。只能操作对象在栈内存中的引用地址。

引用数据类型有对象、数组、函数

var obj1 = new Object();var obj2 = obj1;obj2.name = 'xpf';console.log(obj1.name);  //xpf

这个例子,同样obj2 是 obj1的一个副本,但是不同的是,obj1与obj2的引用地址指向的是同一个堆内存对象。而 obj2.name = 'xpf';  的意思就是通过引用地址,给这个引用地址所指向的堆内存中的对象Object添加了一个值为xpf的name属性,此时再输出obj1.name,就是获取堆内存中的对象object中的name属性,即xpf。下图是该过程的示意图:

                                       



总结:

  • 声明变量时不同的内存分配: 

  1)基本类型值:存储在栈中的简单数据段,也就是说,它们的值直接存储在变量访问的位置

  2)引用类型值:存储在堆中的对象,也就是说,存储在变量处的值是一个指针,指向存储对象的内存地址。

     因为:引用类型值的大小会改变,所以不能把它放在栈中,否则会降低变量查寻的速度。

  • 不同的内存分配机制也带来了不同的访问机制

  1)在javascript中不允许直接访问保存在堆内存中的对象。

  2)而基本类型的值则是可以直接访问到的。

  • 复制变量时的不同

  1)基本类型值:将一个变量复制给另一个变量时,此后这两个变量是完全独立的,他们只是拥有相同的value而已。

  2)引用类型值:将一个变量复制给另一个变量时,会把这个内存地址赋值给新变量,

    也就是说这两个变量都有一个指向堆内存中同一个对象的指针,他们中任何一个作出的改变都会反映在另一个身上。

       复制对象时并不会在堆内存中新生成一个一模一样的对象,只是多了一个指针。

  • 参数传递的不同(把实参复制给形参的过程

  首先我们应该明确一点:ECMAScript中所有函数的参数都是按值来传递的。

  1)基本类型值:只是把变量里的值传递给参数,之后参数和这个变量互不影响。

  2)引用类型值:对象变量它里面的值是这个对象在堆内存中的内存地址,这一点你要时刻铭记在心!

     因此它传递的值也就是这个内存地址,这也就是为什么函数内部对这个参数的修改会体现在外部的原因了,因为它们都指向同一个对象。

 



参考博客:

写在最后:如果还是不理解上面说的,可以这样来

基本数据类型,复制后,两个变量就再无关系,互不影响;

引用数据类型,复制后,对其中一个的操作都会影响到另一个变量。

 

 

                        ---------------本文完---------------

 

 

 

转载地址:http://gwxgn.baihongyu.com/

你可能感兴趣的文章
JAVA算法:无向图的表示
查看>>
[数据分析学习笔记] 数据分析处理流程
查看>>
[数据分析学习笔记] 数据挖掘建模过程
查看>>
[数据分析学习笔记] 数据分析必备的概率论和统计学知识
查看>>
[数据分析学习笔记] 异常值分析方法
查看>>
[统计学笔记] 统计学学习笔记重点总结
查看>>
[统计学笔记] (一) 统计学的基本概念
查看>>
[统计学笔记](二)收集数据
查看>>
[统计学笔记三] 整理和显示数据
查看>>
[统计学笔记九] 方差分析(ANOVA)
查看>>
[机器学习笔记] (一)机器学习基本概念篇(含思维导图)
查看>>
[机器学习笔记] 混淆矩阵(Confusion Matrix)
查看>>
[机器学习笔记] Python 绘制ROC曲线的例子
查看>>
[机器学习笔记] 机器学习中的“过拟合(Overfitting)”和“欠拟合(Underfitting)”
查看>>
[机器学习笔记] 特征(Feature)和特征选择(Feature Selection)
查看>>
[机器学习笔记] Logistic Regression与Linear Regression的区别
查看>>
[Python] Python实现的 Linear Regression 例子(附图)
查看>>
[机器学习笔记] (四)决策树 Decision Tree
查看>>
[机器学习笔记] 分类与预测算法评价指标
查看>>
[机器学习笔记] 常用关联规则算法
查看>>