Dois-je utiliser Angular.copy () ou _.clone ()?

Je travaille sur un projet qui dépend à la fois de Angular et de Underscore.

Lorsque je dois créer une copie d’un object, selon mon humeur du moment, je peux utiliser angular.copy() ou _.clone()

Il me semble que l’une de ces méthodes est probablement plus rapide / fiable / robuste que l’autre.

Existe-t-il un problème connu lié à l’une ou l’autre de ces fonctions qui le rend meilleur ou pire à utiliser, en supposant que les deux bibliothèques sont déjà incluses?

En ce qui concerne votre question: angular.copy et _.clone sont différents. Ce n’est pas une question de savoir ce qui est le mieux, il s’agit de ce que vous avez besoin comme @Kevin B indiqué dans les commentaires.

angular.extend () d’autre part, est une copie superficielle semblable à _.clone

Angular.copy vs Angular.extend

En ce qui concerne les performances, je ne suis pas sûr de ce qui est le mieux, mais pour des raisons d’opinion, je suis opposé à l’inclusion de bibliothèques dans une application angular . angular.copy / angular.extend gagnerait dans ce cas.

Copie superficielle / profonde :

Il est très simple que si l’object ne contient que des champs primitifs, alors vous allez évidemment opter pour une copie superficielle mais si l’object a des références à d’autres objects, en fonction de la requiement, il convient de choisir une copie superficielle ou profonde. Ce que je veux dire par là, c’est que si les références ne sont pas modifiées à tout moment, il n’ya aucun intérêt à opter pour une copie en profondeur. Vous pouvez simplement opter pour une copie superficielle. Mais si les références sont souvent modifiées, vous devez opter pour une copie complète. Encore une fois, il n’y a pas de règle ssortingcte, tout dépend de l’exigence.

La source

Nous avons eu quelques rapports de bogues confirmant que l’utilisation de angular.copy crée des objects vides sur certains téléphones mobiles Windows. Donc, si vous avez besoin de supporter n’importe quelle version d’IE sur mobile, n’utilisez pas angular.copy! Ce bogue aurait été corrigé par Microsoft, mais nous avons néanmoins dû y faire face …

En fait, vous pouvez aussi utiliser Object.assign()

Docs: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

Autres exemples: https://googlechrome.github.io/samples/object-assign-es6/

Je sais qu’il ne dit pas IE, mais je l’ai essayé sur mon IE11 et ça marche …