js中arr的赋值不影响原数组,赋值和引用的区别

1、赋值

var a = 1;var b = a; //赋的是a的复制值b ++;alert(a); //"1" b的修改不影响a2、引用

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并没有互换 因为用新引用覆盖在外部不可见 这个很自然 因为函数只是拿到了引用 并没有权力更改引用

一个人去旅行,而且是去故乡的山水间徜徉。

js中arr的赋值不影响原数组,赋值和引用的区别

相关文章:

你感兴趣的文章:

标签云: