js中arr的赋值不影响原数组,赋值和引用的区别
1、赋值
var a = 1; var b = a; //赋的是a的复制值 b ++; alert(a); //"1" b的修改不影响a
2、引用
var a = [1]; var b = a; //赋的是a的引用 b[0] ++; alert(a); //"2" b的修改对a也有效 不过当然b = [2];这种修改对a是没用的。。。。。。
起到引用作用又不影响原数组的方法
方法一:用jq的$.extend方法
<script type="text/javascript">
var a=[1];
var b;
b= $.extend(true,{},a)
b[0]++;
alert(b[0]);
</script>方法二:用数组的concat方法
<script type="text/javascript"> var a=[1]; var b=a.concat(); b[0]++; alert(a[0]); </script>
方法三:用函数传参的方法
传值的传递:传给函数的是数值的一个复制,函数中对其的修改外部不可见
var a = 1;
var b = 2;
function change(a,b) {
var c = a;
a = b; //用新引用覆盖
b = c;
alert(a); //"2"
alert(b); //"1"
}
change(a,b);
alert(a); //"1"
alert(b); //"2"
传址的传递:传给函数的是数值的一个引用,函数中对其属性的修改外部可见,但用新引用覆盖其则在外部不可见,比如
var a = [1, 2, 3];
var b = [5, 6];
function change(a,b) {
a[0] = 4; //对其属性的修改外部可见
var c = a;
a = b; //用新引用覆盖
b = c;
alert(a); //"5,6"
alert(b); //"4,2,3"
}
change(a,b);
alert(a); //"4,2,3"
alert(b); //"5,6"
从结果可以看出a和b并没有互换 因为用新引用覆盖在外部不可见 这个很自然 因为函数只是拿到了引用 并没有权力更改引用声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
