【www.bbyears.com--php基础】
js中数组的引用应该算是基础知识了:
var arr = [1,2,3];
var arr2 = arr;
arr2[0] = 5; //此时arr和arr2都变成了[5,2,3]
我们怎么斩断这种引用呢?我所知道的有两个方法:
1.数组的slice方法
var arr = [1,2,3];
var arr2 = arr.slice();
arr2[0] = 5; //此时arr为[1,2,3] arr2为[5,2,3] slice方法相当于复制出来一个新数组
2.数组的concat方法
var arr = [1,2,3];
var arr2 = arr.concat();
arr2[0] = 5; //此时arr为[1,2,3] arr2为[5,2,3] 和slice方法一样,concat方法也相当于复制出来一个新数组
值得注意的是下面的问题,函数传参的方法(这个是这篇博文的重点)
var a = [1,2];
var b = [5,6];
function change (x){
x[0]=3;
x=b;
x[1]=9;
}
change(a); //此时a的值为[3,2],不是[5,6],也不是[5,9]
也就是说在函数里面可以修改数组参数的值,却不能修改数组的引用,当改变了数组参数的引用之后,就不会对原数组产生任何影响了,这就是引用关系和函数在一起使用的时候要注意的。
结论:js数组是引用类型,它只允许通过索引来获取或改变数组的值 引用类型的东西都是不能通过(它赋值过的外部变量)所改变的 也就是(它赋值过的外部变量)这个值改变了原数组不会有任何变化
谁能用指针呀 什么的给解释下?
<script type="text/javascript" src="/jquery.js"></script>
<script>
//结论:数组对数组是引用类型,数组对变量是值类型
var a=[1,2,3,4];
//例子1
var b=a;
alert(a);//1234
alert(b);//1234
//例子2
var c=a;
c[3]=5;
alert(c);//1235
alert(a);//1235
//例子3
var d=a[1];
d=10;
alert(a);//1234
</script>