251 votes

Comment terminer le script en JavaScript ?

Comment puis-je quitter le script de JavaScript comme le fait PHP. exit ou die ? Je sais que ce n'est pas la meilleure pratique de programmation mais j'en ai besoin.

1 votes

Pourriez-vous nous en dire plus sur cette exigence, en nous expliquant exactement pourquoi vous essayez d'obtenir ce résultat ?

11 votes

@andynormancx, cela peut être pratique pour le débogage.

10 votes

Juste return; peut être suffisant selon vos besoins, il agit comme die() sans paramètres.

117voto

Lo Sauer Points 5469

Les fonctions "exit" quittent généralement le programme ou le script avec un message d'erreur en paramètre. Par exemple, die(...) en php

die("sorry my fault, didn't mean to but now I am in byte nirvana")

L'équivalent en JS est de signaler une erreur avec la balise lancez mot-clé comme celui-ci :

throw new Error();

Vous pouvez facilement tester cela :

var m = 100;
throw '';
var x = 100;

x
>>>undefined
m
>>>100

58 votes

@Sydwell : Si vous l'entourez d'un bloc catch, il sera attrapé et le programme ne se terminera pas, ce qui va à l'encontre du but recherché.

12 votes

N'oubliez pas que vous pouvez ajouter un message à l'erreur : throw new Error('variable ='+x) ; C'est une façon agréable de terminer rapidement un script pendant que vous travaillez dessus et d'obtenir la valeur d'une variable.

1 votes

@ultimate Je pense que #Sydwell avait l'intention d'envelopper l'ensemble du script dans try/catch, de sorte que vous pouvez obtenir a) une sortie propre b) un message d'exception possible lorsque cela est nécessaire :) Lancer des exceptions non traitées n'apporte généralement rien de bon :)

95voto

Ólafur Waage Points 40104

L'équivalent JavaScript de la fonction PHP die . BTW il appelle juste exit() (merci splattne) :

function exit( status ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Brett Zamir (http://brettz9.blogspot.com)
    // +      input by: Paul
    // +   bugfixed by: Hyam Singer (http://www.impact-computing.com/)
    // +   improved by: Philip Peterson
    // +   bugfixed by: Brett Zamir (http://brettz9.blogspot.com)
    // %        note 1: Should be considered expirimental. Please comment on this function.
    // *     example 1: exit();
    // *     returns 1: null

    var i;

    if (typeof status === 'string') {
        alert(status);
    }

    window.addEventListener('error', function (e) {e.preventDefault();e.stopPropagation();}, false);

    var handlers = [
        'copy', 'cut', 'paste',
        'beforeunload', 'blur', 'change', 'click', 'contextmenu', 'dblclick', 'focus', 'keydown', 'keypress', 'keyup', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'resize', 'scroll',
        'DOMNodeInserted', 'DOMNodeRemoved', 'DOMNodeRemovedFromDocument', 'DOMNodeInsertedIntoDocument', 'DOMAttrModified', 'DOMCharacterDataModified', 'DOMElementNameChanged', 'DOMAttributeNameChanged', 'DOMActivate', 'DOMFocusIn', 'DOMFocusOut', 'online', 'offline', 'textInput',
        'abort', 'close', 'dragdrop', 'load', 'paint', 'reset', 'select', 'submit', 'unload'
    ];

    function stopPropagation (e) {
        e.stopPropagation();
        // e.preventDefault(); // Stop for the form controls, etc., too?
    }
    for (i=0; i < handlers.length; i++) {
        window.addEventListener(handlers[i], function (e) {stopPropagation(e);}, true);
    }

    if (window.stop) {
        window.stop();
    }

    throw '';
}

1 votes

Voici le code source de exit : kevin.vanzonneveld.net/techblog/article/

0 votes

Ce code ne semble pas empêcher les événements des éléments de se déclencher, mais seulement les événements de la fenêtre. Il faudrait donc aussi boucler tous les éléments de la page en faisant quelque chose de similaire. Tout cela semble être une exigence très étrange.

3 votes

L'ensemble du concept de die est un peu cassé - le flux devrait être capable de gérer toutes les éventualités, que cela nécessite un try-catch ou non.

67voto

Jhep Points 61

Même dans les programmes simples sans poignées, événements et autres, il est préférable de placer le code dans une fonction "principale", même s'il s'agit de la seule procédure :

<script> 
function main()
{
//code

}
main();
</script>

De cette façon, lorsque vous voulez arrêter le programme, vous pouvez utiliser "return".

26voto

user1147688 Points 391

Il y a de nombreuses façons pour quitter un script JS ou Node. Voici les plus pertinentes :

// This will never exit!
setInterval((function() {  
    return;
}), 5000);

// This will exit after 5 seconds, with signal 1
setTimeout((function() {  
    return process.exit(1);
}), 5000);

// This will also exit after 5 seconds, and print its (killed) PID
setTimeout((function() {  
    return process.kill(process.pid);
}), 5000);

// This will also exit after 5 seconds and create a core dump.
setTimeout((function() {  
    return process.abort();
}), 5000);

Si vous êtes dans le REPL (c'est-à-dire après avoir exécuté node sur la ligne de commande), vous pouvez taper .exit pour sortir.

23voto

Marc Points 1492

Si vous ne vous souciez pas de savoir si c'est une erreur, écrivez simplement :

fail;

Cela empêchera votre code principal (global) de se poursuivre. Utile pour certains aspects du débogage/testing.

Prograide.com

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.

Powered by:

X