JavaScript值类型与引用类型

JavaScript值类型与引用类型教程

JavaScript变量 的类型可以分为基本类型(也叫值类型)与复杂类型(也叫引用类型),其中,值类型就是 JavaScript 的基本数据类型,引用类型是复杂的对象类型。

JavaScript值类型

JavaScript 的值类型包括:字符串(string)、数值(number)、布尔值(boolean)、nullundefined

JavaScript引用类型

JavaScript 的引用类型包括:对象(Object)、数组(Array)、函数(Function)、日期(Date)、正则表达式(RegExp)。

JavaScript值类型与引用类型对比

值类型 引用类型
概念 原始值指的是原始类型的值,也叫基本类型 引用值指的是引用类型(类) 的值
数据类型 字符串(string)、数值(number)、布尔值(boolean)、null、undefined。 对象(Object)、数组(Array)、函数(Function)、日期(Date)、正则表达式(RegExp)。
存储 栈(stack),占内存空间固定,使用后被销毁 堆(heap),占内存空间不固定,使用后不一定被销毁,只有一个对象没有任何引用时,系统的垃圾回收机制才会回收销毁
赋值方式 1. 值的拷贝,创建一个新对象
2. 保存与复制的是值本身
3. 两份数据在内存中是完全独立的
1. 引用的拷贝,创建一个新引用
2. 保存与复制的是指向对象的一个指针
3. 变量中的存储的地址赋值一份单独存储,
两个变量中修改其中一个对象,另外一个引用来访问的时候,也会访问到修改后的值。
4. 使用 new() 方法构造出的对象是引用型。
值是否可变 不可变 可变
作用域 函数作用域,在函数内部修改时生效,函数销毁时失效 函数中被修改时修改的是运行时数据区中的值,即使函数被销毁,变量的值依旧被改变。
比较方式 值的比较 引用的比较
参数传递 值类型按值传递 引用类型按引用传递
检测类型 typeof 运算符 instanceof 运算符

案例

值类型与引用类型

值类型与引用类型的区别

<!DOCTYPE html> <html> <head> <title>JavaScript值类型与引用类型的区别</title> <script type="text/javascript"> console.log("嗨客网(www.haicoder.net)"); var a = 100; var b = a; a = 200; console.log("a =", a, "b =", b); </script> </head> </html>

程序运行后,控制台输出如下:

35_JavaScript值类型与引用类型.png

我们首先定义了一个整型变量 a 并设置初始值为 100,接着,将整型变量 a 赋值给了整型变量 b,此时,我们再次修改整型变量 a 的值为 200。

最后,我们分别打印整型变量 a 和整型变量 b 的值,发现,此时变量 a 的值为 100,b 的值为 200。因为,整型是基本数据类型,是值类型,因此,修改变量 a 的值不会影响变量 b 的值。

值类型与引用类型

值类型与引用类型的区别

<!DOCTYPE html> <html> <head> <title>JavaScript值类型与引用类型的区别</title> <script type="text/javascript"> console.log("嗨客网(www.haicoder.net)"); var a = {age : 109}; var b = a; b.age = 110; console.log("a =", a); console.log("b =", b); </script> </head> </html>

程序运行后,控制台输出如下:

36_JavaScript值类型与引用类型.png

我们首先定义了一个对象 a,对象 a 有一个 age 属性,并设置其属性值为 109,接着,我们将对象 a 赋值给了对象 b,接着,我们修改了对象 b 的 age 属性的值为 110。

最后,我们分别打印对象 a 和对象 b 的值,发现,此时对象 a 和对象 b 的 age 值完全相同,即,对象 a 因为对象 b 的改变,而被修改。

这是因为,对象 a 和对象 b 都是引用类型,因此,对象 a 和对象 b 其实是同一个对象,因此,对象 b 的修改会导致对象 a 的修改。

JavaScript值类型与引用类型总结

在 JavaScript 中变量的类型可以分为基本类型(也叫值类型)与复杂类型(也叫引用类型),其中,值类型就是 JavaScript 的基本数据类型,引用类型是复杂的对象类型。

JavaScript 的值类型包括:字符串(string)、数值(number)、布尔值(boolean)、null、undefined。

JavaScript 的引用类型包括:对象(Object)、数组(Array)、函数(Function)、日期(Date)、正则表达式(RegExp)。