2016-05-09 28 views
9

Guardando la documentazione per ES6 Object.assign e Lodash _.assign sembra che queste funzioni siano esattamente nello stesso modo.Object.assign vs lodash _.assign

È una comprensione corretta? O mi sta sfuggendo qualcosa?

+3

Certo, sono progettati per fare la stessa cosa. L'unica differenza che posso vedere è che 'Object.assign' converte i valori primitivi in ​​oggetti mentre' _.assign' no (es. 'Object.assign (" ciao ", {pippo: 1})') – apsillers

+0

Il modo migliore è quello di studiare [loro] (https://github.com/lodash/lodash/blob/master/vendor/underscore/underscore.js#L1036-L1060) [fonti] (https://developer.mozilla.org/en -US/docs/Web/JavaScript/Reference/Global_Objects/oggetto/assegnare # Polyfill). Tuttavia, nel caso di lodash questo è un po 'complicato, poiché cambia da versione a versione - il [changelog] (https://github.com/lodash/lodash/wiki/Changelog) menziona anche le differenze di comportamento. – Bergi

+0

grazie @apsillers! questa è una grande differenza da sapere. se hai voglia di scrivere una risposta, inviterò la tua risposta. – sfletche

risposta

17

A seconda del browser. Per i documenti del lodash:

Fatto _.assign utilizzare Object.assign incorporato quando disponibile.

Si può andare qui per il supporto del browser:

In sostanza, IE non dispone di supporto così il codice di lodash viene utilizzato in questo caso

MDN Docs on Object.assign

+0

Scusate, avrei dovuto essere più chiaro. Mi rendo conto che alcuni browser non hanno ancora il supporto per Object.assign. Mi stavo chiedendo, perché quegli ambienti offrano entrambi, c'è una differenza tra i due? – sfletche

+3

lodash defers al browser, quindi no, l'implementazione nativa viene utilizzata in quel caso – JordanHendrix

+1

ah! scusa! ho errato la tua risposta Vedo ora quello che stai dicendo (che lodash stesso usa Object.assign quando è disponibile, il che fa sembrare che l'autore di lodash non abbia intenzione di distinguere tra i due). molto utile. grazie @JordanHendrix! – sfletche