最近在读《javascript高级程序设计》时碰到了js传递方式的问题,花费了些时间,不过总算明白了。
数据类型
在 javascript 中数据类型可以分为两类:
基本类型值 primitive type,比如Undefined,Null,Boolean,Number,String。
引用类型值,也就是对象类型 Object type,比如Object,Array,Function,Date等。
变量的复制
众所周知,js中变量的基本类型和引用类型保存方式是不同的,这也就导致变量复制时也就不同了。如果从一个变量向另一个变量复制基本类型的值时,会将前者的值克隆一个,然后将克隆的值赋值到后者,因此这两个值是完全独立的,只是他们的value相同而已。
var num1 = 10;
var num2 = num1;
console.log(num2);//10
上面的num1中被保存的值为10,当把num1的值赋值给num2时,num2的值也为10。但是这两个10是完全独立的,num2中的10只是被克隆出来的,相当于我写了一个word文档,把它放到了num1的文件夹中,然后我再复制这个word文档,就叫word副本吧,然后把这个副本放到num2的文件夹下,这两个word文档是完全一样的,修改任何一个都不会影响两一个。
num2 += 1;
console.log(num1); //10
console.log(num2); //11
从上面可以看出修改num2的值,num1的值未发生变化。再来看下引用类型的复制。当从一个变