Existe-t-il quelque chose comme "die" en JavaScript ? J'ai essayé avec "break", mais ça ne marche pas :)
C'est absolument la solution et cela fonctionne exactement comme die() ; cependant, il ne faut pas se soucier du "1 Error" rouge de firebug !
Existe-t-il quelque chose comme "die" en JavaScript ? J'ai essayé avec "break", mais ça ne marche pas :)
C'est absolument la solution et cela fonctionne exactement comme die() ; cependant, il ne faut pas se soucier du "1 Error" rouge de firebug !
Je pense que si PHP a un équivalent "firebug", il devrait aussi écrire "1 error" sur die() ;-) Bonne réponse !
Vous pouvez seulement break
une portée de bloc si vous l'étiquetez. Par exemple :
myBlock: {
var a = 0;
break myBlock;
a = 1; // this is never run
};
a === 0;
Vous ne pouvez pas rompre l'étendue d'un bloc à partir d'une fonction de l'étendue. Cela signifie que vous ne pouvez pas faire des choses comme :
foo: { // this doesn't work
(function() {
break foo;
}());
}
Vous pouvez cependant faire quelque chose de similaire avec des fonctions :
function myFunction() {myFunction:{
// you can now use break myFunction; instead of return;
}}
Je ne savais pas qu'il fallait étiqueter un bloc et encore moins en écrire un. Cela signifie-t-il que foo: {}
est un objet ?
Vous pouvez simplement utiliser le return;
exemple
$(document).ready(function () {
alert(1);
return;
alert(2);
alert(3);
alert(4);
});
Le retour renverra à la fonction appelante principale test1() ; et continuera de là jusqu'à test3() ;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<script type="text/javascript">
function test1(){
test2();
test3();
}
function test2(){
alert(2);
return;
test4();
test5();
}
function test3(){
alert(3);
}
function test4(){
alert(4);
}
function test5(){
alert(5);
}
test1();
</script>
</body>
</html>
mais si vous ajoutez simplement throw '' ; cela arrêtera complètement l'exécution sans causer d'erreurs.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<script type="text/javascript">
function test1(){
test2();
test3();
}
function test2(){
alert(2);
throw '';
test4();
test5();
}
function test3(){
alert(3);
}
function test4(){
alert(4);
}
function test5(){
alert(5);
}
test1();
</script>
</body>
</html>
Ceci est testé avec firefox et chrome. Je ne sais pas comment cela est géré par IE ou Safari.
Pour autant que je sache, return
ne quitte que la fonction englobante. Cela ne fonctionne pas lorsque vous voulez arrêter l'exécution de l'ensemble du script.
Appelez simplement die()
sans jamais la définir. Votre script se plantera :)
Quand je fais cela, j'appelle généralement discombobulate()
à la place, mais le principe est le même.
(En fait, ce que cela fait, c'est lancer un ReferenceError
ce qui revient à peu près au même que la réponse de Spudly - mais c'est plus court à taper, pour des raisons de débogage).
L'utilisation d'un identifiant personnalisé indéfini est très créative ! J'aime comment die
est intuitif et concis. Il lui manque l'avantage de throw
lorsqu'il s'agit de consigner un message d'erreur spécifique, mais parfois le numéro de ligne suffit. BTW, die;
sans les parenthèses (dé)fonctionne aussi.
Je voulais mentionner que cela ne fonctionnera pas dans des cas tels que var a = arguments[3] || die('message')
. au lieu de cela, je pense que la mort devrait être : function die(msg) { return eval(`throw "${msg}"`);)
mais même dans ce cas, je pense qu'il faudrait simplement le placer en dur sur la ligne qui casse, de sorte que l'erreur montre quelle ligne a échoué, par exemple this.inputFile = argv[2] || eval('throw "this program requires an input file."');
Probablement, pas sûr que eval() résout le problème si je vous comprends bien. Idéalement, il faudrait regarder une trace de la pile si vous êtes intéressé par l'endroit où l'échec se produit réellement. Sinon, je pense qu'il est prudent de supposer que vous voulez simplement rapporter une sorte de message d'échec de base à votre utilisateur.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
2 votes
Voir ça : stackoverflow.com/questions/550574/
3 votes
function die(str) {throw new Error(str || "Script ended by death");}
Ou quelque chose comme ça XD Il y a plein de meilleures options, mais ça pourrait marcher. Cela pourrait être bon pour le débogage, si vous voulez seulement exécuter la première partie d'un script pour vous assurer qu'il fonctionne.0 votes
@stefita Pourquoi votre commentaire ne figure-t-il pas dans les réponses ? exit() était exactement ce dont j'avais besoin. L'autre moyen, c'est d'exécuter une boucle d'appel automatique, qui sera exécutée 1599 fois puis arrêtera l'exécution. Merci.
0 votes
@AdrianMaire Votre cœur est à la bonne place, mais le "pourquoi" d'une question ne devrait pas être en cause. Les maux de
die
,goto
,eval
etc. sont régurgités à l'infini (et non sans mérite), mais ils ont tous leur utilité, en particulier pour le débogage de bas niveau. Sinon, les langues ne les incluraient pas. Dans ce cas, les équivalents JS dereturn
ythrow
sont assez inoffensifs.0 votes
@Beejor : Je suis d'accord. Dans le cas de JS, j'utilise habituellement 'alert' pour le débogage, qui est comme un die() pour le débogage. Mais pour le code final, je pense toujours qu'il est préférable de passer par une programmation structurée (ou même une sorte de POO), même si cela implique quelques lignes de plus : le meilleur code n'est pas celui qui fonctionne, mais celui que tout programmeur peut comprendre facilement. Mais vous avez raison dans toutes vos déclarations.
0 votes
Je cherche quelque chose comme ça parce que j'ai un code bogué et je me retrouve coincé dans des erreurs - ainsi, je ne peux pas lire les journaux dans les devtools de chrome. Je voudrais quelque chose qui tue V8 juste pour me permettre de lire ces fichus journaux. Il existe [cette fonction] ( stackoverflow.com/questions/1361437/ ) mais je ne pense pas qu'il soit possible de l'appeler depuis le bac à sable.