JavaScript等价于PHP’;让我们死吧
JavaScript中是否有类似“死”的东西?我尝试过使用“break”,但不起作用:)如果标记块作用域,则只能JavaScript等价于PHP’;让我们死吧,javascript,Javascript,JavaScript中是否有类似“死”的东西?我尝试过使用“break”,但不起作用:)如果标记块作用域,则只能中断它。例如: myBlock: { var a = 0; break myBlock; a = 1; // this is never run }; a === 0; 不能从作用域中的函数中断开块作用域。这意味着你不能做以下事情: foo: { // this doesn't work (function() { break foo; }()); }
中断它。例如:
myBlock: {
var a = 0;
break myBlock;
a = 1; // this is never run
};
a === 0;
不能从作用域中的函数中断开块作用域。这意味着你不能做以下事情:
foo: { // this doesn't work
(function() {
break foo;
}());
}
您可以通过函数执行类似的操作:
function myFunction() {myFunction:{
// you can now use break myFunction; instead of return;
}}
您可以简单地使用返回代码>示例
$(document).ready(function () {
alert(1);
return;
alert(2);
alert(3);
alert(4);
});
返回将返回到主调用函数test1();并从那里继续到test3()
函数test1(){
test2();
test3();
}
函数test2(){
警报(2);
返回;
test4();
test5();
}
函数test3(){
警惕(3);
}
函数test4(){
警惕(4);
}
函数test5(){
警惕(5);
}
test1();
但如果你只是加上抛出“;这将完全停止执行,而不会导致任何错误
<!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>
函数test1(){
test2();
test3();
}
函数test2(){
警报(2);
抛出“”;
test4();
test5();
}
函数test3(){
警惕(3);
}
函数test4(){
警惕(4);
}
函数test5(){
警惕(5);
}
test1();
这是通过firefox和chrome进行测试的。我不知道IE或Safari是如何处理这一问题的。您可以使用自己的PHP版本:
function die(msg)
{
throw msg;
}
function test(arg1)
{
arg1 = arg1 || die("arg1 is missing");
}
test();
使用萤火虫和光荣的
debugger;
永远不要让调试器向前迈出任何一步。比抛出正确的错误更干净,不是吗?只需调用die()
,而不定义它。您的脚本将崩溃。:)
当我这样做时,我通常调用discomboulate()
,但原理是一样的
(实际上,这会抛出一个ReferenceError
,使其与Spudy的答案大致相同-但出于调试目的,它的输入较短。)您可以使用return false;
这将终止您的脚本。在Javascript中,PHP的语言构造die
没有精确的对等项die
相当于Java中的System.exit()
,它终止当前脚本并调用shutdown hook。
正如一些用户所建议的那样<代码>抛出错误
在某些情况下可以使用,但是它永远不能保证当前脚本的终止。
在您的throw
语句周围总是会有一个异常处理块,除非您在最顶层的脚本块上调用它,它最终只会退出您正在执行的脚本块
但是,它不会阻止在此处执行第二个块(打印hello):
抛出新错误(“测试”);
写下“你好”;
如果您使用的是nodejs,则可以使用
process.exit(<code>);
警惕(“我是ajith fan”);
警惕(“我爱拳击”);
警惕(“我爱MMA”);
这应该像die()一样工作
您可以尝试以下方法:
return 0;
在停止进程的情况下,它可以工作。JS中没有与php die()等效的函数退出,
如果您没有使用任何函数,那么您可以简单地使用return
return;
用于开发目的的全局die()函数:
var die = function(msg) {
throw new Error(msg);
}
使用die():
看到这个了吗:“die”,比如“goto”,与结构化编程不兼容。这些类型的说明决不能用于严肃的项目<代码>函数die(str){throw new Error(str | | |“Script end by death”)}
或其他更好的选项,但这会起作用。如果您只想运行脚本的第一部分以确保其工作,则可能有助于调试。@stefita为什么您的注释不包含在答案中??exit()正是我需要的。另一种方法是运行自动调用循环,将运行1599次,然后停止执行。谢谢。@AdrianMaire你的心在正确的地方,但是问题的“为什么”不应该成为争论的焦点。die
、goto
、eval
等的罪恶被无休止地重复(并非毫无价值),但它们都有其特殊用途,尤其是在低级别调试中。否则语言就不会包括它们。在这种情况下,return
和throw
的JS等价物是无害的。这绝对是答案,就像die()一样工作;然而,人们不应该关心firebug的红色“1错误”!我认为,如果PHP有一个“firebug”等价物,它还应该在die()上写“1错误”;-)回答得好!这不会在IE8中产生一个警告对话框吗?不是1对1的等价物,因为PHP也有未捕获的异常。这不会完全停止执行,但只会大致在抛出时停止。具体细节非常模糊,但我很确定脚本可以在其他地方继续运行。我从来不知道如何标记块范围,更不用说编写块范围了。这是否意味着foo:{}
是一个对象?不是。它是一个块范围。这与foo:if(true){…}
相同,因为您不能“从作用域中的函数中断开块作用域”,所以是否有其他选择?据我所知,return
只退出封闭函数。当您想停止执行整个脚本时,它不起作用。hmmm是的,您是对的,它不会停止所有脚本的执行。抛出“”
:…而不会导致任何错误…-不完全是Uncaught”“
使用自定义的未定义标识符非常有创意!我喜欢die
的直观和简洁。在记录特定的错误消息时,它确实缺少throw
的好处,但有时仅仅是行号就足够了。顺便说一句,die代码>不带括号(un-)也可以工作,或者干脆死掉;在您希望javascript停止的行中。这个答案非常有JS意识^^^如果它能工作,就不会脏了!大概只有在最高层。PHP的die()可以在任何级别被调用,并且会导致PHP解释器立即消失。不完全一样!我想说的是,在像var a=arguments[3]| | die('message')
这样的情况下,这是行不通的。仪表
<script>
alert("i am ajith fan");
<?php die(); ?>
alert("i love boxing");
alert("i love MMA");
</script>
function die(msg = ''){
if(msg){
document.getElementsByTagName('html')[0].innerHTML = msg;
}else{
document.open();
document.write(msg);
document.close();
}
throw msg;
}
return 0;
return;
var die = function(msg) {
throw new Error(msg);
}
die('Error message here');