EDIT : Quand cette réponse a été postée, {...obj}
n'était pas disponible dans la plupart des navigateurs. Aujourd'hui, vous devriez pouvoir l'utiliser sans problème (sauf si vous devez prendre en charge IE 11).
Utilisez Object.assign.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
var obj = { a: 1 };
var copy = Object.assign({}, obj);
console.log(copy); // { a: 1 }
Cependant, cela ne fera pas un clone profond. Il n'existe pas encore de méthode native de clonage profond.
EDIT : Comme @Mike 'Pomax' Kamermans l'a mentionné dans les commentaires, vous pouvez cloner profondément des objets simples (c'est-à-dire sans prototypes, fonctions ou références circulaires) en utilisant JSON.parse(JSON.stringify(input))
2 votes
Ce n'est pas une ES6 légale. Mais si c'était le cas, ce n'est pas un clone : les propriétés du clone et de l'original pointent toutes deux vers les mêmes choses maintenant. Par exemple,
original = { a: [1,2,3] }
vous donne un clone avecclone.a
étant littéralementoriginal.a
. Modification par soitclone
ooriginal
modifie la même chose donc non, c'est mauvais =)2 votes
@AlbertoRivera C'est un peu comme JavaScript valide, dans la mesure où il s'agit d'un étape 2 qui sera probablement un ajout futur à la norme JavaScript.
0 votes
@Frxstrem la question portant sur ES6, ce n'est pas du JavaScript valide =)
3 votes
Clonage superficiel ou profond ?
2 votes
Tu as raison, ce n'est pas de l'ES6 valide, c'est ES9 valide . developer.mozilla.org/fr/US/docs/Web/JavaScript/Référence/
0 votes
@mikemaccana comment trouvez-vous ? Je le vois comme ecmascript 2015 (6ème édition dans votre lien) developer.mozilla.org/fr/US/docs/Web/JavaScript/Référence/
0 votes
Depuis le lien "Pour les littéraux d'objet (nouveau dans ECMAScript 2018) :
let objClone = { ...obj };
"