Les deux principales différences sont la présence d'un booléen optionnel pour deep
qui est récursive sur la fusion jQuery $.extend
(où la méthode false
n'est pas pris en charge ? !) ...
let object1 = {
id: 1,
name: {
forename: 'John',
surname: 'McClane'
},
};
let object2 = {
id: 2,
name: {
}
};
// merge objects
let objExtend = $.extend(true, {}, object1, object2);
let objAssign = Object.assign({}, object1, object2);
// diff
console.log(objExtend.name.forename); // "John"
console.log(objAssign.name.forename); // undefined
Object.assign() copie les valeurs des propriétés. Si la valeur source est une référence à un objet, elle ne copie que cette valeur de référence.
Exemple : JsFiddle
Le second est le $.extend
ignore la méthode undefined
...
let object1 = {
id: 1,
name: 'hello world'
};
let object2 = {
id: 2,
name: undefined
};
// merge objects
let objExtend = $.extend({}, object1, object2);
let objAssign = Object.assign({}, object1, object2);
// diff
console.log(objExtend.name); // "hello world"
console.log(objAssign.name); // undefined
Exemple : JsFiddle
Docs
MDN : Object.assign(target, ...sources)
jQuery : jQuery.extend([deep], target, object1 [, objectN])
En outre :
Si vous cherchez un moyen de fusionner des objets en profondeur sans jQuery, cette réponse est excellente :
Comment procéder à une fusion profonde au lieu d'une fusion superficielle ?
Exemple : JsFiddle
Comment réaliser une fusion profonde en utilisant Object.assign
avec ES6 :
function isObject(item) {
return (item && typeof item === 'object' && !Array.isArray(item));
}
function mergeDeep(target, ...sources) {
if (!sources.length) return target;
const source = sources.shift();
if (isObject(target) && isObject(source)) {
for (const key in source) {
if (isObject(source[key])) {
if (!target[key]) Object.assign(target, { [key]: {} });
mergeDeep(target[key], source[key]);
} else {
Object.assign(target, { [key]: source[key] });
}
}
}
return mergeDeep(target, ...sources);
}
5 votes
Eh bien pour
$.extend
vous devez disposer de jQuery. La seule différence est que l'une d'entre elles dépend d'une bibliothèque externe. Si vous avez déjà jQuery dans votre projet, ce point est en quelque sorte discutable - mais inclure une bibliothèque entière juste pour que vous puissiez en utiliser un$.extend
ne semble pas être une bonne idée.0 votes
J'ai JQuery dans mon projet, n'y a-t-il donc aucune différence entre les deux ? Même lors de l'utilisation de tableaux par exemple ?
2 votes
Ce poste devrait être utile - stackoverflow.com/questions/122102/
0 votes
J'accepterais que vous postiez la première comme réponse. Sinon, je suppose que cette question peut être close.
0 votes
Pas besoin de dupliquer le contenu :-) il suffit de noter la réponse qui vous a le plus aidé
0 votes
Duplicata possible de Quelle est la manière la plus efficace de cloner un objet en JavaScript ?
0 votes
On oublie souvent que de nombreuses fonctionnalités de la bibliothèque existent parce que la fonctionnalité native n'existait pas à ce moment-là.