angular.copy()和JSON.parse(JSON.stringify())之间的区别?

时间:2015-04-21 18:32:26

标签: javascript json angularjs object clone

有人可以解释angular.copy()和JSON.parse(JSON.stringify())之间的区别吗?有吗?你会建议使用什么? angular.fromJson(angular.toJson())是否与JSON.parse(JSON.stringify())相同?

请注意,我已经为JSON.parse(JSON.stringify())和How do I correctly clone a JavaScript object?读取angular.copy() reference for angular.copy()。

2 个答案:

答案 0 :(得分:10)

JSON.parse(JSON.stringify())不会复制的内容:

  • 功能
  • 具有特殊表示形式的任何对象,例如Date(它将被复制,但不会被Date
  • 值为undefined
  • 的属性

angular.fromJson(angular.toJson())基本相同,只是angular.toJson()省略了Angular内部使用的属性(以$$开头的属性)。

答案 1 :(得分:7)

我可以非常具体地回答你的问题,指出他们以不同方式对待undefined

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

更常见的是我更喜欢angular.copy:

  • angular.copy说完全你想要什么;从可读性的角度来看,JSON.parse * JSON.stringify是一个hack。
  • angular.copy几乎肯定更具性能,因为它是您尝试做的更高级别的规范。如果编写它的工程师写了 less 高性能的东西,他们会用JSON版本来实现它......

如果说,他们会以同样的方式处理更多深奥的数据,例如功能吗?我无法回答这个问题,但在决定之前我会研究(或等待另一个答案)。