JavaScript数据类型之间存储的区别?
我们知道,JavaScript分为了基本数据类型和复杂数据类型,既然分了两部分,那么他们之间就存在一定的差距。它们之间最大的区别就是在存储上的区别。
我们的存储空间分为了栈和堆
栈:
主要存储基本数据类型的内容
堆:
主要存储复杂数据类型的内容
基本数据类型在内存中的存储情况
简单来说,就是直接在 栈空间 内存储一个数据
复杂数据类型在内存中的存储情况
例如,下面这个对象的存储
var obj={
name:'jack',
age:18,
gender:'男'
}
- 首先,在堆里面开辟一个存储空间
- 把对象里面的数据存到这个堆空间里面
- 把存储空间的地址赋值给栈里面的变量
如图示
通俗地讲,对象在栈区存储的是地址。
数据类型之间的比较
- 基本数据类型是 值 之间的比较
var num=1
var str='1'
num==str//true
- 复杂数据类型是 地址 之间的比较
var obj={
name:'jack',
age:18
}
var obj1={
name:'jack',
age:18
}
obj==obj1//false
我们创建了两个对象obj和obj1,那么计算机就会在内存中开辟两个堆空间存储这两个变量,而这两个堆空间的内存地址又不一样,因此obj和obj1也不一样
既然这样,那么如何复制一个对象呢?
对象之间的复制?
先看一个例子
var obj={
name:'jack',
age:19
}
var obj2=obj
obj2.name='mike'
console.log(obj.name)//mike
如果大家对这个结果感到惊讶的话,那么就说明还没有彻底理解前面所说的。
我们来看一看这个
var obj2=obj 这个语句实际上就是将obj的地址赋给obj2,所以obj2此时就相当于obj
如何建立两个互不影响但内容相等的对象呢?
- 我们首先创立两个互不影响的对象
- 然后将内容复制过去就行了
var obj1={
name:'jack',
age:19
}
var obj2={
}
for(var i in obj1)
{
obj2[i]=obj1[i]
}