Gasper a fait un commentaire avec la solution sur laquelle il a terminé, mais je pense que cela vaut la peine de le rappeler comme une réponse réelle :
try
{
delete window.x;
}
catch(e)
{
window["x"] = undefined;
}
Question intéressante, je m'y suis justement heurté ce soir. L'exception est levée sur IE mais pas sur Firefox. Je soupçonne que cette solution de contournement fait perdre de la mémoire, donc à utiliser avec parcimonie.
Il a été demandé, pourquoi ne pas simplement assigner undefined ? C'est important si vous voulez énumérer les clés plus tard (bien que si vous vous fiez à la solution de contournement, l'énumération des clés ne fera toujours pas ce que vous voulez...). Mais quoi qu'il en soit, pour mettre en évidence la différence entre supprimer et simplement assigner undefined ( http://jsfiddle.net/fschwiet/T4akL/ ):
var deleted = {
a: 1
};
var cleared = {
a: 1
};
delete deleted["a"];
cleared["a"] = undefined;
for(var key in deleted) {
console.log("deleted has key", key);
}
for(var key in cleared) {
console.log("cleared has key", key);
}
console.log("deleted has a?", deleted.hasOwnProperty('a'));
console.log("cleared has a?", cleared.hasOwnProperty('a'));
produit des résultats :
cleared has key a
deleted has a? false
cleared has a? true