js 数组引用 发现的问题
2014-09-26 11:05
183 查看
最近做项目时,要对返回的数据[保存在json数组中]做一次修改,但原数据要保留一次做备用。首先想到,原数据不动,用一个临时的变量来修改,大致模型就是这样:
本来觉得是一个很简单的问题。但测试时候发现,并没得到想要的结果。测了很久才找到问题:a数据居然也跟着b的操作一起发生了改变,怎么都想不通。问了同事,貌似他没遇到过,也搞不清楚怎么回事。只好求助网络查询。查到了一个跟我相似的问题。
其中有这样一个例子:
其中一个仁兄给出了解释:
JS中没有指针,只有传值(value)与传址(reference引用)的区别
var a = [1,2,3,4] //a不仅是数组,还是个对象,实际上a就是对[1,2,3,4]的引用
var b=a
var c=a
//以上两条赋值语句建立了b与c 对a即[1,2,3,4]的引用,无论改变a 还是b抑或c 都是对[1,2,3,4]的操作,这就是传址(堆中操作)
var d=a[1] //则是把a[1]的值"1"传递给d,对d的改变则不会影响a[1],即所谓的传值(栈中操作)
这才有点明白。还是用原文的结论:
js数组是引用类型,它只允许通过索引来获取或改变数组的值 引用类型的东西都是不能通过(它赋值过的外部变量)所改变的 也就是(它赋值过的外部变量)这个值改变了原数组不会有任何变化
原文点这里
// 原始: a=[1,2,3,4,5,.........]; // 临时: var b = a ; // 操作: b[b.length] = 1 ;
本来觉得是一个很简单的问题。但测试时候发现,并没得到想要的结果。测了很久才找到问题:a数据居然也跟着b的操作一起发生了改变,怎么都想不通。问了同事,貌似他没遇到过,也搞不清楚怎么回事。只好求助网络查询。查到了一个跟我相似的问题。
其中有这样一个例子:
<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> //结论:数组对数组是引用类型,数组对变量是值类型
其中一个仁兄给出了解释:
JS中没有指针,只有传值(value)与传址(reference引用)的区别
var a = [1,2,3,4] //a不仅是数组,还是个对象,实际上a就是对[1,2,3,4]的引用
var b=a
var c=a
//以上两条赋值语句建立了b与c 对a即[1,2,3,4]的引用,无论改变a 还是b抑或c 都是对[1,2,3,4]的操作,这就是传址(堆中操作)
var d=a[1] //则是把a[1]的值"1"传递给d,对d的改变则不会影响a[1],即所谓的传值(栈中操作)
这才有点明白。还是用原文的结论:
js数组是引用类型,它只允许通过索引来获取或改变数组的值 引用类型的东西都是不能通过(它赋值过的外部变量)所改变的 也就是(它赋值过的外部变量)这个值改变了原数组不会有任何变化
原文点这里
相关文章推荐
- JS数组的引用问题
- js 数组赋值问题 :值传递还是引用?
- js数组引用传值问题
- JS数组比较大小,发现其中问题。
- js 数组复制引用重复的问题
- js循环里进行回调,引用循环里的变量,发现只是最后值的问题
- js 数组赋值问题 :值传递还是引用?
- js数组引用传值问题
- perl 函数参数中传递数组和引用的一些问题
- 引用外部JS文件的问题
- .net 中引用js文件出错的问题
- DWR中引用JS的路径问题
- 引用js的问题
- Asp.net页面中引用js文件无效的问题的解决方法
- JSP页面中JS,图片等相对路径引用问题
- Asp.net页面中引用js文件无效的问题的解决方法
- 母版页中引用图片、外部js、css文件的路径问题
- 母板页中的引用的图片、JS、css的路径等问题
- 母板页中的引用的图片,JS,css等路径问题
- 奇怪的问题:js代码只能放在代码中不能引用文件