9
votes

Alternatives à supprimer?

J'ai examiné à travers beaucoup de poteaux de blog, de documentation, etc. sur le mode strict de JavaScript.

J'ai remarqué qu'il y a beaucoup de restrictions sur le mot clé Supprimer. Je ne sais même pas si vous pouviez les appeler des restrictions. Il semble que suppression ne fonctionne plus.

J'aimerais utiliser le mode strict. C'est une bonne idée. Mais je pense aussi que Supprimer est une bonne idée.

Y a-t-il des moyens alternatifs de "supprimer" une variable?


2 commentaires

L'esprit nous disait ce que vous essayez d'atteindre? Comme il se distingue, la question se lit comme une déclaration.


Cela ressemble à des hes à la recherche d'une alternative au mot clé Supprimer pour supprimer une variable en JavaScript ...


3 Réponses :


4
votes

Vous n'êtes pas Supprimer variables.

Supprimer est utilisé pour supprimer une propriété d'un objet.

Supprimer le FOO. A Supprimera la propriété "A" à partir de l'objet foo .

Pourquoi avez-vous besoin de supprimer une variable locale de la portée? Vous pouvez simplement définir la variable pour être non défini xxx

une autre façon de vérifier les agressions indéfinies serait en train de faire foo === vide 0 < / Code> Etant donné que void est un opérateur qui exécute l'expression suivant et renvoie non défini . C'est une astuce intelligente.


26 commentaires

Il n'est pas recommandé de définir des variables sur la valeur de non défini car dans les versions JS non strictes La valeur de non définie peut être manipulée.


@Eli mais vous allez avoir une valeur locale de non défini non définie? Outre si vous trouvez un code qui manipule la brûlure indéfinie, interdit ensuite l'auteur d'utiliser JavacRip.


Ce n'est pas local. C'est une variable globale appelée config .


@tylermwashburn Supprimer la fenêtre.config . Mais sérieusement, pourquoi est-il nécessaire d'être global, il y a un meilleur modèle à ce que vous faites, vous ne le savez tout simplement pas.


Je ne peux pas penser à une instance où j'en ai jamais eu besoin. Pour la comparaison, il est toujours recommandé de taper comparer et non de valeur Comparer: typeof foo === 'non défini' est préféré sur foo == non défini . Une variable doit être recueillie une fois que le moteur détermine qu'elle ne sera plus accessible en déterminant si elle peut être référencée à l'extérieur. C'est pourquoi le cadre correct est si important. Peu importe si cela est indéfini, car la définition d'une variable à indéfinie ne le détruira pas. Je recommande vivement cette lecture: perfectionkills.com/unerstanding-Delete


Et si une personne change la valeur de non défini dans la portée locale? Je sais que les chances de cela sont petites, mais il s'agit de la meilleure pratique. Si vous ne devriez pas l'utiliser d'une manière d'une manière, pourquoi est-ce une bonne idée?


@Eli Il n'est que nécessaire pour vérifier avec typeof si la variable pourrait n'exister peut-être pas. Si la variable existe et que je veux savoir s'il a une valeur définie, je vérifie la variable === non définie .


@Eli Si une personne change la valeur de non défini dans la portée locale a), vous avez un collègue incompétent ou B) votre utilisation eval . Pour a) Vous lui apprenez comment écrire JavaScript et corriger le bogue. Pour b) vous arrêtez d'utiliser eval .


C'est votre propre décision de comparer l'encontre d'undefined, je vous conseille de savoir que la plupart des Gurus JS recommandent contre cela, car indéfini est mutable. Et si avant votre variable === non défini Vérifiez I Mettez non défini = 3; ? Votre code échouerait. Je comprends que la chance de ceci est petite, mais quelqu'un pourrait facilement casser quelque chose en disant si (variable = non défini) . C'est beaucoup plus subtil, mais le concept s'applique toujours.


Je comprends que quelqu'un ne devrait pas le faire, mais parfois, vous ne pouvez pas arrêter stupide. C'est juste la raison pour laquelle ce n'est pas fait.


@Raynos qu'est-ce que cela serait-il alors?


Stackoverflow.com/questions/4725603/... < / a>


@Eli, je n'ai pas besoin d'écrire un code de protection idiot. L'écriture de code de défense hyperly est tout aussi mauvais que la micro optimisation. Ce n'est tout simplement pas nécessaire. Si quelqu'un met non défini = 3 dans mon code, cela devient leur problème, pas le mien. Ce que vous parlez de bugs et de fautes de frappe qui seront corrigés. Le code comme celui-là n'est pas entrer dans la production. Le code comme celui-là n'est pas Evaluez l'examen par les pairs.


Tout ce que j'essaie de dire, c'est que pendant que vous pouvez comparer à indéfinir, il est considéré comme une mauvaise pratique de le faire.


@Eli c'est une mauvaise pratique de comparer contre le global non défini . Comparaison contre un non défini est sûr.


@Raynos Que soit-il si vous battez du code et oubliez des signes égaux? si (variable = non défini) . C'est une erreur commune, pourquoi prendre la chance que cela puisse jamais arriver.


Désolé @raynos, ils peuvent tous être modifiés. C'est pourquoi les JS stricts dans le futur non défini sont immuables à cause de ce problème.


@Eli code critique. Essai. etc. Ce que vous avez il y a un bug . Les bugs ne vont pas dans le code libéré. C'est la même chose qu'une faute de frappe comme faire winddw.creeeelement pauses. Je ne défends pas à Againts que parce que des insectes comme ceux-ci sont pris en charge par examen et test, sans parler des dames de syntaxe et JSlint.


Je comprends que c'est faux. Mais vous ne pouvez pas toujours empêcher les insectes d'entrer dans la production. Je ne tire pas ces meilleures pratiques de l'air mince. Cela a été recommencé à maintes reprises par des ingénieurs JS brillants et pour une bonne raison. J'essaie simplement de vous informer de la façon dont les autres évitent de toujours courir dans le problème pour commencer.


@Eli il n'y a rien de mal avec le chèque de type de type , c'est parfaitement valide. Mais il n'y a aucune raison d'interdire l'utilisation de non définie comme une variable locale dans la source que vous avez le contrôle. "Je ne peux pas toujours empêcher les insectes d'entrer dans la production" qui est correct. Mais faire = dans une instruction IF ou attribuer une valeur à non défini n'est pas l'un de ces bugs. Les bugs qui entrent dans la production sont soit des conditions de course, des cas de bord complexes ou des bugs par conception. Il devrait simplement être le choix personnel d'utiliser non défini localement ou non.


Je n'essaie pas de dire que vous devriez changer votre façon de faire des choses. Je déteste juste voir une pratique promue qui va à l'encontre d'une meilleure pratique établie établie .


Je suis totalement d'accord: si vous souhaitez comparer contre non défini qui vous appartient. J'essaie juste de rendre les autres conscients qu'il est recommandé d'être fait d'une autre manière.


@Eli à nouveau La meilleure pratique établie est de ne pas utiliser global non défini . Une copie locale de non définie doit être considérée comme sûre si vous avez le contrôle de votre code source et que vous êtes compétent. En dehors de Crockford Nom Me un expert respectable qui interdit l'utilisation de non défini .


Mais c'est incompatible. Au lieu de le faire deux manières différentes selon votre environnement, vous pouvez le faire de la même manière dans tous. C'est un certitude pour la maintenance.


@Eli "en fonction de votre environnement" Que voulez-vous dire? Comment est-ce incompatible? Si je suis dans un environnement où non défini est abusé, je vais refactor que pour eux.


John Resig, Stoyan Stefanov, Nicolas Zakas pour en nommer quelques-uns.




2
votes

Comme les autres font allusion, vous n'avez jamais besoin de Supprimer Variables. Cela ressemble davantage à une question de ne pas contrôler correctement la portée. Si vous conservez vos variables dans une portée de la fonction, elles seront traitées de mémoire une fois que elles ne sont plus référencées.

Avez-vous un autre espace de noms global autre que la fenêtre globale Windows Cela vous profiterait probablement d'avoir quelque chose comme ça pour cette situation: xxx

pour une compréhension approfondie réelle de la suppression et du non défini dans JS:

http://perfectionkills.com/unStanding-Delete/

http:/scottdowne.wordpress.com/2010/11 / 28 / JavaScript-typeof-Undefined-vs-non défini /

Comment vérifier si un objet a une propriété en JavaScript?


4 commentaires

J'ai une variable globale config utilisé pour configurer certaines choses dans un fichier JavaScript. Je veux le supprimer après que cela a fait le chargement, mais cela jette une erreur et la laisse là-bas. La ligne est Supprimer global.config; .


L'objet de configuration doit être défini avant l'exécution du script.


Cela n'affectera pas l'applicabilité de ce que j'ai dit. Avez-vous un échantillon de la manière dont votre configuration est initialisée?


@Tylerwashburn Si vous souhaitez supprimer de Global Scope Suppr de la fenêtre . La portée globale et l'objet de la fenêtre sont les mêmes. Just Supprimer la fenêtre.config