今天在作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; }