我正在开发一个将Angular和Underscore都作为依赖项的项目。
当我需要创建对象的副本时,根据我当时的心情,我可以使用angular.copy()
或_.clone()
我发现这些方法中的一种可能比另一种方法更快/更可靠/更健壮。
假设两个库都已包含在内,是否存在任何已知问题,这些函数使其使用的好坏比其他函数更好或更差?
答案 0 :(得分:42)
关于你的问题: angular.copy和_.clone是不同的。这不是一个更好的问题,而是@Kevin B在评论中所说的内容。
另一方面,angular.extend()是一个类似于_.clone的浅拷贝
Angular.copy vs Angular.extend
性能方面,我不确定哪个更好,但出于意见,我反对将库包含在任何角度应用程序的全局范围(下划线)中,因为通常这些内容都写成angular modules。在这种情况下,angular.copy / angular.extend会获胜。
浅/深拷贝:
非常简单,如果对象只有原始字段,那么显然你会去浅层复制,但如果对象有对其他对象的引用,那么根据要求,应该选择浅拷贝或深拷贝。我的意思是,如果引用没有随时修改,那么深入复制是没有意义的。你可以选择浅拷贝。但是如果经常修改引用,那么你需要进行深层复制。同样没有硬性规定,这完全取决于要求。
答案 1 :(得分:4)
我们有一些错误报告确认使用angular.copy会在某些Windows手机上创建空对象。 因此,如果您需要在移动设备上支持任何版本的IE,请不要使用angular.copy! 据称这个错误已被微软修复,但我们不得不处理它......
实际上,您也可以使用Object.assign()
...
文档:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
更多示例:https://googlechrome.github.io/samples/object-assign-es6/
我知道它没有说IE,但我在我的IE11上尝试了它并且它有效...