[JavaScript] Le mot clé delete - Supprimer une propriété d'un objet
Un des mots clés les moins connus de JavaScript est sans doute le mot clé delete (msdn | mozdev). Ce mot clé permet de supprimer une propriété (expando attribute) d'un objet JavaScript.
Par exemple, nous avons un objet o qui contient 3 propriétés a, b, c. Nous pouvons boucler sur le nom des propriétés grâce à l'instruction for in :
var o = {a : 1, b : 2, c : 3};
for(var s in o)
Sys.Debug.trace(s); // return a, b, c
Pour supprimer un élément de cet objet, le définir à null ou undefined ne nous sera d'aucune utilité.
var o = {a : 1, b : 2, c : 3};
o.b = null;
// ou
o.b = undefined;
for(var s in o)
Sys.Debug.trace(s); // return a, b, c
Si l'on veut supprimer la propriété il faut utiliser le mot clé delete :
var o = {a : 1, b : 2, c : 3};
delete o.b;
for(var s in o)
Sys.Debug.trace(s); // return a, c
A quoi sert cet astuce ? je me sert très souvent d'un objet comme un dictionnaire (o[key] = value), pour supprimer un élément de ce dictionnaire il faut alors avoir recours à cette astuce.
Le mot clé delete fonctionne également avec les tableaux. Mais attention l'ordre des éléments n'est pas décalé et la taille du tableau n'est pas modifié ! L'instruction delete est alors équivalente à assigner undefined à la position voulue :
var l = ['a', 'b', 'c'];
Sys.Debug.trace(l[1]); // => b
delete l[1]; // equivalent a l[1] = undefined;
Sys.Debug.trace(typeof(l[1])); // => undefined
Sys.Debug.trace(l.length); // => 3
Pour ces raisons je vous déconseille d'utiliser delete sur un tableau ! Si vous voulez supprimer un élément d'un tableau utilisez la méthode splice qui est conçu pour ça.
var l = ['a', 'b', 'c'];
l.splice(2,1); // Array.splice(index, count)
Sys.Debug.trace(l.length); // => 2
Vous pouvez également utiliser la méthode removeAt introduite par Microsoft Ajax Library.