JavaScript值类型与引用类型
JavaScript值类型与引用类型
赞
赏
JavaScript值类型与引用类型教程
在 JavaScript 中 变量 的类型可以分为基本类型(也叫值类型)与复杂类型(也叫引用类型),其中,值类型就是 JavaScript 的基本数据类型,引用类型是复杂的对象类型。
JavaScript值类型
JavaScript 的值类型包括:字符串(string)、数值(number)、布尔值(boolean)、null、undefined。
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 运算符 |
案例
值类型与引用类型
值类型与引用类型的区别
程序运行后,控制台输出如下:
我们首先定义了一个整型变量 a 并设置初始值为 100,接着,将整型变量 a 赋值给了整型变量 b,此时,我们再次修改整型变量 a 的值为 200。
最后,我们分别打印整型变量 a 和整型变量 b 的值,发现,此时变量 a 的值为 100,b 的值为 200。因为,整型是基本数据类型,是值类型,因此,修改变量 a 的值不会影响变量 b 的值。
值类型与引用类型
值类型与引用类型的区别
程序运行后,控制台输出如下:
我们首先定义了一个对象 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)。