今天在作ajax請求的時候,遇到了一個問題是:好比我後臺返回一個json數據php
var datalist = data.list ; //這個是前端接收得ajax json數據html
1:先console.dir(datalist);前端
而後我在 for 循環遍歷這個數據 ,ajax
for(var i in datalist){json
var shtml = '<div>'+datalist[i].username+'</div>';this
}prototype
console.dir(datalist);htm
我上面看樣子是沒有改變datalist這個對象,可是打印出的結果是不同的。。對象
網上找的解決辦法是:io
首先克隆出一個對象便可,,,,
方法一:克隆
Object.prototype.Clone = function() { var objClone; if ( this.constructor == Object ) objClone = new this.constructor(); else objClone = new this.constructor(this.valueOf()); for ( var key in this ) { if ( objClone[key] != this[key] ) { if ( typeof(this[key]) == 'object' ) { objClone[key] = this[key].Clone(); } else { objClone[key] = this[key]; } } } objClone.toString = this.toString; objClone.valueOf = this.valueOf; return objClone; }
function clone(myObj){ if(typeof(myObj) != 'object') return myObj; if(myObj == null) return myObj; var myNewObj = new Object(); for(var i in myObj) myNewObj[i] = clone(myObj[i]); return myNewObj; }方法二實現:
Object.prototype.Clone = function() { var objClone; if ( this.constructor == Object ) objClone = new this.constructor(); else objClone = new this.constructor(this.valueOf()); for ( var key in this ) { if ( objClone[key] != this[key] ) { if ( typeof(this[key]) == 'object' ) { objClone[key] = this[key].Clone(); } else { objClone[key] = this[key]; } } } objClone.toString = this.toString; objClone.valueOf = this.valueOf; return objClone; }