Differences between angular.copy() and JSON.parse(JSON.stringify())?

旧巷老猫 提交于 2019-12-22 04:33:26

问题


Can someone explain the differences between angular.copy() and JSON.parse(JSON.stringify())? Are there any? What you will recommend to use? Is angular.fromJson(angular.toJson()) the same as JSON.parse(JSON.stringify())?

Just to mention, I've read How do I correctly clone a JavaScript object? for JSON.parse(JSON.stringify()) and angular.copy() reference for angular.copy().


回答1:


What JSON.parse(JSON.stringify()) won't copy:

  • functions
  • any object that has a special representation, like Date (it will get copied but not as Date)
  • properties with the value undefined

angular.fromJson(angular.toJson()) is basically the same except that angular.toJson() omits properties that are used by Angular internally (those starting with $$).




回答2:


I can very specifically answer your question by pointing out they treat undefined differently:

> JSON.parse(JSON.stringify(undefined))
SyntaxError: Unexpected token u

And more generally I would prefer angular.copy:

  • angular.copy says exactly what you want; JSON.parse * JSON.stringify is a hack, from a readability standpoint.
  • angular.copy is almost certainly more performant since it is a higher-level specification of what you are trying to do. If the engineers who wrote it wrote something less performant, they would implement it with the JSON version...

That being said, do they treat more esoteric data, such as functions, the same way? I can't answer this off the top of my head but I would research (or wait for another answer) before deciding.



来源:https://stackoverflow.com/questions/29780376/differences-between-angular-copy-and-json-parsejson-stringify

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!