Должен ли я использовать Angular.copy() или _.clone()?

Я работаю над проектом, который имеет как Angular, так и Underscore как зависимость.

Когда мне нужно создать копию объекта, в зависимости от моего настроения в то время, я мог бы использовать angular.copy() или _.clone()

Мне кажется, что один из этих методов, вероятно, более быстрый/надежный/надежный, чем другой.

Есть ли какая-либо известная проблема с любой из этих функций, которая делает ее лучше или хуже для использования, чем другая, если обе библиотеки уже включены?

Ответ 1

Что касается вашего вопроса: angular.copy и _.clone разные. Это не вопрос о том, что лучше, речь идет о том, что вам нужно, как @Kevin B, изложенном в комментариях.

angular.extend(), с другой стороны, является мелкой копией, родственной _.clone

angular.copy vs angular.extend

Производительность мудрая, я не уверен, что лучше, но ради мнений, я против включения библиотек в глобальную область (подчеркивание) с любым приложением angular, так как обычно эти вещи записываются как angular. angular.copy/angular.extend выиграл бы в этом случае.

Мелкая/глубокая копия:

Очень просто, что если объект имеет только примитивные поля, то, очевидно, вы пойдете на мелкую копию, но если объект имеет ссылки на другие объекты, то на основе этого требования следует выбрать неглубокую копию или глубокую копию. Я имею в виду здесь, если ссылки не изменяются в любое время, тогда нет смысла искать глубокую копию. Вы можете просто выбрать мелкую копию. Но если ссылки часто меняются, то вам нужно пойти на глубокую копию. Снова нет жесткого и быстрого правила, все зависит от требования.

Источник

Ответ 2

У нас были некоторые отчеты об ошибках, подтверждающие, что использование angular.copy создает пустые объекты на некоторых мобильных телефонах Windows. Поэтому, если вам нужно поддерживать любую версию IE на мобильных устройствах, не используйте angular.copy! Предположительно эта ошибка была исправлена ​​Microsoft, но тем не менее нам пришлось иметь дело с ней...

Собственно, вы можете использовать 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, и он работает...