JavaScript之值类型和引用类型的区别
来源:互联网 发布:胡琳 知乎 编辑:程序博客网 时间:2024/06/09 15:45
值类型:
字符串(string)、数字(number)、布尔(boolean)、null、undefined
1. 基本类型是不可变的,这里的不可变,是说基本类型指向的内存空间不变,例如:
- 1
- 2
- 3
- 1
- 2
- 3
最后的输出结果是5,这里a变量所指向的值确实变了,但是在计算机内存中,进行的操作是在原先的基础上,又重新请求了一个‘2’的内存,然后加起来得到的‘5’,也就是说并没有对原先申请的内存‘3’进行变动,而是拼接。
2. 基本类型的访问是按值访问的,就是说你可以操作保存在变量中的实际的值。
3.基本类型的变量是存放在栈区的(栈区指内存里的栈内存),栈区包括了 变量的标识符和变量的值。:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
那么它的存储结构如下图:
引用类型:
数组(array)、对象(object)、函数(function)
1. 引用类型是可变的,这里的可变,指得是计算机内存是可变的,例如:
- 1
- 2
- 3
- 1
- 2
- 3
结果输出’[1,2,3,4,5]’,在计算机内存中,不会重新生成一个完整的数组,而是接在原先申请的[1,2,3,4]的内存上进行修改。
之所以值类型和引用类型在内存中的操作不同,是因为值类型包含的数据量一般较小,复制的成本比较低,引用类型包含的数据量一般比较大,并且复杂,复制的成本比较高,所以js引擎在实现的时候,就会对二者进行区别对待。
2. 引用类型的访问是按引用访问,当查询时,我们需要先从栈中读取内存地址,然后再顺藤摸瓜地找到保存在堆内存中的值;
- 1
- 2
- 3
- 1
- 2
- 3
则这三个对象的在内存中保存的情况如下图:
实际上,这些数据类型都可以用”!!”强制转换成对应的boolean类型:
2.字符串为空:false1.
!!"abc"==>true
!!" "==>true
2.
!!""==>false
Numbertrue!!123=>trueArray无论数组是否为空,都为true1.!![1,2,3]==>true
2.
!![]==>true
Object无论对象是否为空,都为true1.!!{"abc":"def"}==>true
2.
!!{}==>true
Nullfalse!!null==>false
Undefinedfalse!!undefined==>false
Symbol无论是否为空,都为true1.!!Symbol('foo')==>true
2.
!!Symbol()==>true
3.
!!Symbol('')==>true
1 0
- JavaScript之值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别 .
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- 值类型和引用类型的区别
- H5基础知识第六课时(CSS)1
- SSL 2289——庆功会
- Logback和Logstash的集成
- CentOS下升级Git1.7.1升级到Git2.2.1
- NSOJ 大数阶乘
- JavaScript之值类型和引用类型的区别
- 《我的Angular入坑记》——通过小例子看ng-repeat
- [bigdata-60]mysql的高可用主主同步复制及其在阿里云上的实践
- MyEclipse安装主题(Color Theme)
- Android Studio建立百度地图步骤及导航无语音解决方法
- java中常用的内存区域
- 在activity中如何正确获取View的宽高
- linux里的cp 、mv命令详解
- H5基础知识第六课时(CSS)2