js基础语法-使用值和使用引用

当一个数据被复制时,如果数据使用值的方式存储,那么这个复制操作马上回生成这个值的副本,副本和原数据的值相同,存储在不同的位置,改变副本的值不会影响原始数据的值,反之亦然。eg:
[code]var a = 10;//a是数值10,它是一种值类型的数据
var b = a;//b=a复制的是a的值
b++;
alert('a=' + a + ',' + 'b=' + b);//最后b的值为11,a的值为10[/code]
如果复制数据时,数据使用引用的方式存储,那么实际上被复制的是对这个数据的引用,数据的实际副本只有一份,不论是通过原始的变量改写数据的值还是通过新的变量改写数据的值,数据的变化马上会同时在两个变量发生。eg:
[code]var a=[1,2,3];//a是数组[1,2,3],它是一种引用类型的数字
var b = a;//因此b = a复制的是a的引用
b[0] = 99;
alert('a=' + a + ',' + 'b=' + b);//最后a和b的值都是[99,2,3],它们同时被改变[/code]
[color=Blue]装箱和拆箱:[/color]
把基本数据类型转换为对应的引用类型的操作被称为装箱,反之,把引用类型转换为对应的值类型,被称为拆箱。eg:
[code]var a = 10, b = "JavaScript", c = true;
var o_a = new Number(a);
var o_b = new String(b);
var o_c = new Boolean(c);[/code]
o_a,o_b,o_c分别是a,b,c对应的包装对象,它们的值就是a,b,c的原始值。
【注意】o_a,o_b,o_c是引用类型,所以对它们的操作将遵循引用类型数据的规则,对它们进行比较时,也是对引用进行比较,而不是对内容进行比较。另外,typeof操作符作用于它们的结果都是object。
”装箱“的最大作用是将值作为对象来处理。之前用的var b = (255).toString(16);这里实际隐含了一个类型转换,将数值255转换为对象Number(255),再调用toString方法。对包装对象拆箱,只要调用它们的valueOf()方法,就能得到原始值。

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复