Han*_*ans 7 javascript javascript-objects
我有以下代码(我使用的是jQquery库):
var obj = {};
var objstring = '{"one":"one","two":"two","three":"three"}'
// first console output
console.log(objstring);
var jsonobj = $.parseJSON(objstring);
// second console output
console.log(jsonobj);
obj.key = jsonobj;
obj.key.test = "why does this affect jsonobj? (even in the second console output)";
// third console output
console.log(jsonobj);
Run Code Online (Sandbox Code Playgroud)
我的问题:当我做obj.key = jsonobj并且我在新的obj.key中更改值时.为什么jsonobj中的值也会改变?我怎么能避免这种情况?(我想要一个新的jsonobj"副本").
我做了这个测试用例:http://jsfiddle.net/WSgVz/
我想解决这里发生的一小部分问题,因为其他人已经很好地解决了JavaScript对象引用的大问题:
// second console output
console.log(jsonobj);
obj.key = jsonobj;
obj.key.test = "why does this affect jsonobj? (even in the second console output)";
Run Code Online (Sandbox Code Playgroud)
这是记录的WebKit错误的结果,console.log语句在调用时不输出对象console.log,而是在一段时间后输出.
这是因为该对象没有被复制。该obj.key属性仅包含对对象的引用,因此当您将某些内容分配给 时,obj.key.test效果与将其分配给jsonobj.test.
您可以使用 jQuery 方法扩展来创建副本:
obj.key = $.extend({}, jsonobj);
Run Code Online (Sandbox Code Playgroud)
这会将值复制到新创建的对象 ( {}) 中。
| 归档时间: |
|
| 查看次数: |
243 次 |
| 最近记录: |