javascript對象引用與賦值javascript
<script type="text/javascript">java
//例子一: 引用web
var myArrayRef = new Array(0,1,2); //建立數組對象數組
var mySeconArrayRef = myArrayRef; // 對象複製.函數
myArrayRef[0] = 100; // 修改元素值spa
alert(mySeconArrayRef[0]);code
/**orm
* 輸出 100; 學過其它語言的都應該知道這裏應該輸出的是0 爲何輸出的是100呢?對象
* 上面程序經過把myArrayRef對象複製給了mySeconArrayRef這時就存在了2個獨立的 但最初值是相同的對象blog
* 由於是獨立的爲何修改myArrayRef會對別一個對象有影響呢?你們都知道只有當他們引用的是同一個對象時這時修改一個纔會
* 對別一個產生影響.可是在javascript語言中建立的對象myArrayRef值中其時保存的是對象的引用(也就是一個地址).
* 也就是 我用 new Array生成的保存在內存中而new Array把它所在的地方告訴了myArrayRef,myArrayRef又把這地址告訴了mySeconArrayRef
* 他們兩個都指向的是new Array生成對象的地址而不是把對象保存在myArrayRef中,因此經過其中的一個去修改值時其時是修改他們同指象的那對象.
*/
alert(mySeconArrayRef[0] );
//例子二: 賦值
var myVa = 'ABC'; //把ABC的值 賦予了myVa
var myVb = myVa; // myVa 賦值給 myVb
myVa = 'DEF'; //修改myVa
/**
* 輸出的是:ABC. 由於是把值保存在了變量了 而不是保存的是引用地址,因此他們兩個是相對獨立的總體.
*/
alert(myVb);
</script>
若是真要複製對象互不影響,則要經過轉換賦值或者遍歷key:value來複制你中的方法和屬性。
注意:對象的子對象也是引用,因此遍歷賦值的時候要判斷,子元素是不是對象,若是子元素是對象,則繼續對子元素進行遍歷賦值。
轉換賦值方式:
var data = {a:1,b:2,c:3,d:[0,1,2,3]}; var str = JSON.stringify(data); var data1 = $.parseJSON(str); //$爲jQuery對象須要引入jQuery包 data1["e"] = 4; data1["d"][0] = 11; console.log(data); console.log(data1);
輸出結果:
{a: 1, b: 2, c: 3, d: [0,1,2,3]}
{a: 1, b: 2, c: 3, d: [11,1,2,3], e: 4}
相互沒有影響
var data = {a:1,b:2,c:3,d:{q:4,w:5,e:6}}; var data1 = data; function con(data2){ data2["r"] = 5; console.log(JSON.stringify(data2)); } con(data1); console.log(JSON.stringify(data));
輸出結果:
var arr = {"a":"1","b":"2"}; var arr1 = arr; arr = {}; arr["a"] = 2; console.log(arr1); console.log(arr);
輸出結果:{"a":"1","b":"2"},{"a":2}
轉載請註明:http://www.tea119.com