ECMAScript原始值和引用值-JavaScriptING
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ECMAScript原始值和引用值-JavaScriptING,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4576字,纯文字阅读大概需要7分钟。
内容图文
本篇文章主要和大家分享了一些ECMAScript 原始值和引用值的知识,有需要的朋友们可以参考一下一、原始值和引用值的概念
在 ECMAScript 中,变量可以存在两种类型的值,即原始值和引用值。
1.1 原始值
(1)原始值指的是 原始类型 的值,也叫 基本类型,例如 Number、Stirng、Boolean、Null、Underfined 。
(2)存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。
(3)注意
在许多语言中,字符串都被看作引用类型,而非原始类型,因为字符串的长度是可变的。ECMAScript 打破了这一传统。
1.2 引用值
(1)引用值指的是 引用类型 的值,例如 Object、Function、Array、Date、RegExp 。
(2)存储在堆(heap)中的对象,也就是说,存储在变量处的值是一个指针(point),指向存储对象的内存处。
二、栈和堆
2.1 原始值存储在栈中
为变量赋值时,ECMAScript 的解释程序必须判断该值是原始类型,还是引用类型。要实现这一点,解释程序则需尝试判断该值是否为 ECMAScript 的原始类型之一,即 Undefined、Null、Boolean、Number 和 String 型。由于这些原始类型占据的空间是固定的,所以可将他们存储在较小的内存区域 - 栈中。这样存储便于迅速查寻变量的值。
2.2 引用值存储在堆中
如果一个值是引用类型的,那么它的存储空间将从堆中分配。由于引用值的大小会改变,所以不能把它放在栈中,否则会降低变量查寻的速度。相反,放在变量的栈空间中的值是该对象存储在堆中的地址。地址的大小是固定的,所以把它存储在栈中对变量性能无任何负面影响。
2.3 图示
三、原始值和引用值的不同
3.1 赋值方式
3.2 值是否可变
3.3 比较方式不同
四、赋值方式和值是否可变
4.1 原始值是以值的拷贝方式赋值,值是不可变的。
4.2 引用值是以引用的拷贝方式赋值,值是可变的。
4.3 Example
4.4 说明
(1)原始值赋值 → 其实是将值拷贝一份并赋值给新的变量,这个值就是副本,他和原始值是互相独立的,改变其中一个值不会影响到其他的值。
(2)引用值赋值 → 当一个引用类型,例如一个对象,使用 = 将其赋值给另一个变量,实际上是其对象的地址引用赋值给新的变量,这两个变量都指向同一个地址引用,他们有相同的地址。所以若改变其中一个变量(的地址引用指向的对象),另一个变量(的地址引用指向的同一个对象)也将改变。
4.5 扩展
五、比较方式不同
5.1 原始值的比较是 值 的比较
5.2 引用值的比较是 引用 的比较
5.3 Example
5.4 说明
(1)原始值 a 和 b 的数据类型不同,但也可以进行值的比较。(在值比较之前,自动进行了数据类型的 隐式转换)
== → 只比较值
=== → 不仅比较值,还比较数据类型
(2)引用值 obj1 和 obj2 分别引用的是存放在堆内存中的两个不同的对象,所以 obj1 和 obj2 的值(地址引用)不一样。
阅读更多
一、原始值和引用值的概念
在 ECMAScript 中,变量可以存在两种类型的值,即原始值和引用值。
1.1 原始值
(1)原始值指的是 原始类型 的值,也叫 基本类型,例如 Number、Stirng、Boolean、Null、Underfined 。
(2)存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。
(3)注意
在许多语言中,字符串都被看作引用类型,而非原始类型,因为字符串的长度是可变的。ECMAScript 打破了这一传统。
1.2 引用值
(1)引用值指的是 引用类型 的值,例如 Object、Function、Array、Date、RegExp 。
(2)存储在堆(heap)中的对象,也就是说,存储在变量处的值是一个指针(point),指向存储对象的内存处。
二、栈和堆
2.1 原始值存储在栈中
为变量赋值时,ECMAScript 的解释程序必须判断该值是原始类型,还是引用类型。要实现这一点,解释程序则需尝试判断该值是否为 ECMAScript 的原始类型之一,即 Undefined、Null、Boolean、Number 和 String 型。由于这些原始类型占据的空间是固定的,所以可将他们存储在较小的内存区域 - 栈中。这样存储便于迅速查寻变量的值。
2.2 引用值存储在堆中
如果一个值是引用类型的,那么它的存储空间将从堆中分配。由于引用值的大小会改变,所以不能把它放在栈中,否则会降低变量查寻的速度。相反,放在变量的栈空间中的值是该对象存储在堆中的地址。地址的大小是固定的,所以把它存储在栈中对变量性能无任何负面影响。
2.3 图示
三、原始值和引用值的不同
3.1 赋值方式
3.2 值是否可变
3.3 比较方式不同
四、赋值方式和值是否可变
4.1 原始值是以值的拷贝方式赋值,值是不可变的。
4.2 引用值是以引用的拷贝方式赋值,值是可变的。
4.3 Example
4.4 说明
(1)原始值赋值 → 其实是将值拷贝一份并赋值给新的变量,这个值就是副本,他和原始值是互相独立的,改变其中一个值不会影响到其他的值。
(2)引用值赋值 → 当一个引用类型,例如一个对象,使用 = 将其赋值给另一个变量,实际上是其对象的地址引用赋值给新的变量,这两个变量都指向同一个地址引用,他们有相同的地址。所以若改变其中一个变量(的地址引用指向的对象),另一个变量(的地址引用指向的同一个对象)也将改变。
4.5 扩展
五、比较方式不同
5.1 原始值的比较是 值 的比较
5.2 引用值的比较是 引用 的比较
5.3 Example
5.4 说明
(1)原始值 a 和 b 的数据类型不同,但也可以进行值的比较。(在值比较之前,自动进行了数据类型的 隐式转换)
== → 只比较值
=== → 不仅比较值,还比较数据类型
(2)引用值 obj1 和 obj2 分别引用的是存放在堆内存中的两个不同的对象,所以 obj1 和 obj2 的值(地址引用)不一样。
相关推荐:
详解ECMAScript6变量的解构赋值
JavaScript和ECMAScript 之间的区别
ECMAScript6入门之Class对象的实例详解
以上就是ECMAScript 原始值和引用值 - JavaScript ING的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是互联网集市为您收集整理的ECMAScript原始值和引用值-JavaScriptING全部内容,希望文章能够帮你解决ECMAScript原始值和引用值-JavaScriptING所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。