一, js 中的数据类型共六种:
值类型五种: Boolea Number String Null undefined
引用类型: Object ---- 三大引用类型: Object Array Function
题目 1: var a = 100;
- var b = a;
- a = 200;
- console.log (b);
题目 2: var a = {age : 20};
- var b = a;
- b.age = 21;
- console.log (a.age);
题目 1 的答案是 100, 题目 2 的答案是 21,
题目 1 是简单的值类型, 在从一个变量向另一个变量赋值基本类型时, 会在该变量上创建一个新值, 然后再把该值复制到为新变量分配的位置上.
此时, a 中保存的值为 100 , 当使用 a 来初始化 b 时, b 中保存的值也为 100, 但 b 中的 100 与 a 中的是完全独立的, 该值只是 a 中的值的一个副本, 此后,
这两个变量可以参加任何操作而相互不受影响. 也就是说基本类型在赋值操作后, 两个变量是相互不受影响的.
题目 2 是引用类型, 当从一个变量向另一个变量赋值引用类型的值时, 同样也会将存储在变量中的对象的值复制一份放到为新变量分配的空间中.
这时保存在变量中的是对象在堆内存中的地址, 所以, 与简单赋值不同, 这个值的副本实际上是一个指针, 而这个指针指向存储在堆内存的一个对象. 那么赋值操作后,
两个变量都保存了同一个对象地址, 则这两个变量指向了同一个对象. 因此, 改变其中任何一个变量, 都会相互影响.
因此, 引用类型的赋值其实是对象保存在栈区地址指针的赋值, 因此两个变量指向同一个对象, 任何的操作都会相互影响.
来源: http://www.bubuko.com/infodetail-2603592.html