Is there something like "die" in JavaScript? I've tried with "break", but doesn't work :)
15 Answers
throw new Error("my error message");
5 Comments
You can only break a block scope if you label it. For example:
myBlock: {
var a = 0;
break myBlock;
a = 1; // this is never run
};
a === 0;
You cannot break a block scope from within a function in the scope. This means you can't do stuff like:
foo: { // this doesn't work
(function() {
break foo;
}());
}
You can do something similar though with functions:
function myFunction() {myFunction:{
// you can now use break myFunction; instead of return;
}}
3 Comments
foo: {} is an object?foo: if(true){...}You can simply use the return; example
$(document).ready(function () {
alert(1);
return;
alert(2);
alert(3);
alert(4);
});
The return will return to the main caller function test1(); and continue from there to 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>
but if you just add throw ''; this will completely stop the execution without causing any errors.
<!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>
This is tested with firefox and chrome. I don't know how this is handled by IE or Safari
3 Comments
return exits only the enclosing function. It does not work when you want to stop executing the whole script.throw "": ...without causing any errors... - Not quite... Uncaught ""Just call die() without ever defining it. Your script will crash. :)
When I do this, I usually call discombobulate() instead, but the principle is the same.
(Actually, what this does is throw a ReferenceError, making it roughly the same as spudly's answer - but it's shorter to type, for debugging purposes.)
3 Comments
die is intuitive and concise. It does lack the benefit of throw when it comes to logging a specific error message, but sometimes just the line number is enough. BTW, die; without the parentheses (un-)works too.It is possible to roll your own version of PHP's die:
function die(msg)
{
throw msg;
}
function test(arg1)
{
arg1 = arg1 || die("arg1 is missing");
}
test();
2 Comments
var a = arguments[3] || die('message'). instead, I think die should be: function die(msg) { return eval(`throw "${msg}"`);) but even then, I think this should just be hard placed on the line that breaks so that the error shows which line failed, eg this.inputFile = argv[2] || eval('throw "this program requires an input file."');use firebug and the glorious...
debugger;
and never let the debugger make any step forward. Cleaner than throwing a proper Error, innit?
1 Comment
There's no exact equaliant of language construct die of PHP in Javascript. die in PHP is pretty much equal to System.exit() in Java, which terminates the current script and calls shutdown hooks.
As some users suggested; throw Error can be used in some cases, however it never guarantees the termination of the current script.
There can be always an exception handling block surrounding your throw statement- unless you call it on the top most level script block, which eventually exits only the script block you're executing.
However it won't prevent the second block from being executed here (prints hello):
<script type="text/javascript">
throw new Error('test');
</script>
<script type="text/javascript">
document.write("hello");
</script>
Comments
You can use return false; This will terminate your script.
2 Comments
<script>
alert("i am ajith fan");
<?php die(); ?>
alert("i love boxing");
alert("i love MMA");
</script>
function die(str) {throw new Error(str || "Script ended by death");}Or something XD Plenty of better options out there, but this would work. Might be good for debugging, if you only want to run the first part of a script to make sure it works.die,goto,eval, etc. are endlessly regurgitated (and not without merit), but they all have their special uses, especially for low-level debugging. Otherwise languages wouldn't include them. In this case, the JS equivalents ofreturnandthroware innocuous enough.