1.基础类型有哪些?复杂类型有哪些?有什么特征?
-基本类型值:指的是保存在栈内存中的简单数据段,有数值、布尔值、null、undefined.
var a=1;
var b=a;
var a=2;
console.log(a)//2
console.log(b)//1
-
复杂类型值:指的是那些保存在堆内存中的对象,变量中保存的实际上只是一个指针,这个指针执行内存中的另一个位置,由该位置保存对象,有对象、数值、函数、正则
var obj1={name:"hunger"}; var obj2=obj1; obj1.name="mary"; console.log(obj1);//{name:"mary"} console.log(obj2);//{name:"mary"},obj2也发生了变化
由于存储数据的位置不同,也导致二者有不同的特征,这就必须了解堆和栈的区别,堆适用于存储对象实例,和类信息的,其中的数据可以为多线程共享,里面的数据存在时间视对象与类的存在时间而定,栈是方法执行区,里面存储的是局部变量和方法运行时栈帧,里面的数据是私有的,不共享的,且随着方法的结束而销毁。
2.如下代码的输出? 为什么?
var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);//输出false,因为obj1和obj2虽然值一样,但是两个不同的对象,指针的地址不一样
console.log(obj1 = obj2);//此时把obj2的值和地址赋值给为obj1,此时对象obj1和obj2共享一个指针地址
console.log(obj1 == obj2);//输出true,因为二者的指针地址相同,指向一个共同的储存堆区。