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 内部使用的属性(以 $$
开头的属性)。
谁能解释一下 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 内部使用的属性(以 $$
开头的属性)。