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

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

谁能解释一下 angular.copy() 和 JSON.parse(JSON.stringify()) 之间的区别?有没有?你会推荐使用什么? angular.fromJson(angular.toJson()) 和 JSON.parse(JSON.stringify()) 一样吗?

顺便提一下,我已经阅读 How do I correctly clone a JavaScript object? for JSON.parse(JSON.stringify()) and angular.copy() reference for angular.copy().

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

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

更一般地说,我更喜欢 angular.copy:

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

话虽如此,他们是否以相同的方式处理更深奥的数据,例如函数?我无法马上回答这个问题,但我会在决定之前研究(或等待另一个答案)。

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

  • 函数
  • 任何具有特殊表示的对象,例如 Date(它会被复制,但不会像 Date
  • 属性值为 undefined

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