数据类型
基本数据类型:指简单的数据段;
引用数据类型,指的是多个值构成的对象。
常见的基本数据类型:
Number,string,boolean,null和undefined
基本数据类型是按值访问的,因为直接操作保存在变量中的实际值;
Var a=10;
Var b=a;
b=20;
b获取的是a值的一份拷贝,虽然两个变量的值相等,但两个变量保存了两个不同的基本数据类型。B只保存了a复制的一个副本,所以b改变,对a没有影响。
Boolean,Number,Stringà原始类型
Undefined,Null—>原始值
注意:原始类型:代表了各自类型的所有成员。
原始值:代表了各自特殊类型的唯一成员。
引用数据类型:Object,Array,Function,Date等
Js中引用类型是保存在堆内存中的对象。
与其他语言不同的是,你不可以直接访问堆内存空间中的位置和操作堆内存空间。只能操作对象在栈内存中的引用地址。
引用类型数据在栈内存中保存的实际上市对象的堆内存中引用地址。通过这个引用地址可以快速查找到保存在堆内存中的对象。
Var obj1=new Object();
Var obj2=obj1;
Obj2.name=”aaa”;
Console.log(obj1.name)//aaa
两个引用类型指向了同一个堆内存对象,把obj1在栈内存中引用地址复制了一份给obj2.所以改变时,改变的是堆内存对象。
基本类型和引用类型的区别:
基本类型:
1) 原始值存储在栈中的简单数据段,也就是说他们直接存储在变量访问的位置。
2) 原始类型的值可以直接访问到。
3) 原始值在将一个保存着原始值的变量时,会将原始值的副本赋值给新变量,此后两个变量完全独立,他们只是有用相同的value而已。
4) Es中所有函数参数都是按值传递的,但涉及原始类型和引用类型还是有区别的。
原始值:知识把变量里的值传递给参数,之后参数和这个变量互补影响。
引用类型:
1) 引用值存储在堆中的对象,也就是存储在变量处的值是一个指针,指向存储对象的内存地址。因为引用值的大小会改变,所以不能把它放在栈中,否则会降低变量查询的速度。相反,放在变量栈空间中的值是该对象存储在堆中的地址。地址的大小是固定的,所以把它存储在栈中队变量性能无任何负面影响。
2) 在js中不允许直接访问保存在堆内存中的对象。所以在访问一个对象时。首先得到的是这个对象自爱堆内存中的地址。然后再按这个地址去获取这个对象的值。这就是传说中的按引用访问。
3) 引用值:在将一个保存着对象的内存地址的变量复制给另一个变量时,会把这个内存地址赋值给新变量。也就是这两个变量指向了堆内存中同一个对象。他们中任何一个做出的改变会反应在另一个身上。
4) 对象变量里的值是这个对象在堆内存中的内存地址。因此它传递的值就是这个内存地址。这也就是为什么函数内部对这个函数的参数进行改变时,会体现在外部的原因。因为他们指向同一个对象。