【问题标题】:JavaScript equivalent of PHP’s dieJavaScript 相当于 PHP 的死
【发布时间】:2010-11-24 14:08:57
【问题描述】:

在 JavaScript 中是否有类似“死亡”的东西?我试过“break”,但没有用:)

【问题讨论】:

  • “die”,如“goto”,不符合结构化编程。这些类型的指令不应该用于严肃的项目。 en.wikipedia.org/wiki/Structured_programming
  • function die(str) {throw new Error(str || "Script ended by death");} 或者其他东西 XD 那里有很多更好的选择,但这会起作用。如果您只想运行脚本的第一部分以确保其正常工作,可能对调试很有用。
  • @stefita 为什么你没有对答案发表评论? exit() 正是我所需要的。另一种方法是运行自动调用循环,将运行 1599 次然后停止执行。谢谢。
  • @AdrianMaire 你的心在正确的地方,但问题的“为什么”不应该成为问题。 diegotoeval 等的弊端在不断地被反省(并非没有优点),但它们都有其特殊的用途,尤其是低级调试。否则语言不会包括它们。在这种情况下,returnthrow 的 JS 等效项已经足够无害了。

标签: javascript


【解决方案1】:
throw new Error("my error message");

【讨论】:

  • 这绝对是答案,就像 die();然而人们不应该关心萤火虫的红色“1错误”!
  • 我认为如果 PHP 有一个“firebug”等价物,它也应该在 die() 上写“1 error” ;-) 好答案!
  • 这不会在 IE8 中产生警告对话框吗?
  • 不是一对一的等价物,因为 PHP 也有未捕获的异常。
  • 这不会完全停止执行 AFAIK,但只会大致在投掷附近。具体细节非常模糊,但我很确定脚本可以在其他地方继续运行。
【解决方案2】:

你只能break一个块范围,如果你标记它。例如:

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;
}}

【讨论】:

  • 我从来不知道如何标记块作用域,更不用说编写块作用域了。这是否意味着foo: {} 是一个对象?
  • 没有。这是一个块范围。同foo: if(true){...}
  • 既然不能“从范围内的函数中破坏块范围”,还有其他选择吗?
【解决方案3】:

您可以简单地使用return; 示例

$(document).ready(function () {
        alert(1);
        return;
        alert(2);
        alert(3);
        alert(4);
});

return 将返回到主调用函数 test1();并从那里继续到 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>

但是如果你只是添加 throw '';这将完全停止执行而不会导致任何错误。

<!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>

这是用 Firefox 和 chrome 测试的。我不知道 IE 或 Safari 是如何处理的

【讨论】:

  • 据我所知,return 仅退出封闭函数。当您想停止执行整个脚本时,它不起作用。
  • 嗯是的,你是对的,它不会停止所有脚本的执行。
  • throw "": ...不会导致任何错误... - 不完全... Uncaught ""
【解决方案4】:

只需调用die() 而不定义它。你的脚本会崩溃。 :)

我这样做的时候,我一般会调用discombobulate(),但是原理是一样的。

(实际上,它的作用是抛出一个ReferenceError,使其与 spudly 的答案大致相同 - 但输入更短,用于调试目的。)

【讨论】:

  • 自定义未定义标识符的使用非常有创意!我喜欢die 的直观和简洁。在记录特定错误消息时,它确实缺乏throw 的好处,但有时只需行号就足够了。顺便说一句,die; 不带括号 (un-) 也可以。
  • 或者干脆死了;在您希望 javascript 停止的那一行。
  • 这个答案太 JS 思想了^^ 如果它有效,它并不肮脏!
【解决方案5】:

如果你使用的是nodejs,你可以使用

process.exit(<code>);

【讨论】:

  • 如果这是关于 node.js 的问题,那么问题将带有标签 node.js
  • @FelixSFD:它仍然对我有帮助,因为我正在寻找这个,完全无视标签;)
【解决方案6】:

可以滚动你自己的 PHP 版本:

function die(msg)
{
    throw msg;
}

function test(arg1)
{
    arg1 = arg1 || die("arg1 is missing"); 
}

test();

JSFiddle Example

【讨论】:

  • 我想提一下,这在var a = arguments[3] || die('message') 这样的情况下不起作用。相反,我认为 die 应该是:function die(msg) { return eval(`throw "${msg}"`);) 但即便如此,我认为这应该只是硬放在中断的行上,以便错误显示哪一行失败,例如 this.inputFile = argv[2] || eval('throw "this program requires an input file."');
  • 如果我理解你的话,可能不确定 eval() 是否能解决问题。理想情况下,如果您对实际发生故障的位置感兴趣,则可以查看堆栈跟踪。否则,我认为可以安全地假设您只是想向您的用户报告某种基本的失败消息。
【解决方案7】:

JS中没有相当于php die()的函数退出, 如果你没有使用任何函数,那么你可以简单地使用 return;

return;

【讨论】:

    【解决方案8】:

    你可以试试:

    return;   
    

    在停止过程的情况下工作。

    【讨论】:

      【解决方案9】:

      使用萤火虫和光荣...

      debugger;
      

      永远不要让调试器向前迈出一步。比扔一个合适的Error 更干净吗?

      【讨论】:

      • 不完全一样!
      【解决方案10】:

      Javascript 中的 PHP 语言构造 die 没有完全等价的。 PHP 中的die 几乎等同于Java 中的System.exit(),后者终止当前脚本并调用关闭挂钩。 正如一些用户建议的那样; throw Error 在某些情况下可以使用,但它从不保证当前脚本的终止。 throw 语句周围总是有一个异常处理块——除非你在最顶层的脚本块上调用它,它最终只退出你正在执行的脚本块。

      但是它不会阻止第二个块在这里执行(打印你好):

      <script type="text/javascript">
        throw new Error('test');
      </script>
      <script type="text/javascript">
        document.write("hello");
      </script> 
      

      【讨论】:

        【解决方案11】:

        用于开发目的的全局 die() 函数:

        var die = function(msg) {
            throw new Error(msg);
        }
        

        使用 die():

        die('Error message here');
        

        【讨论】:

          【解决方案12】:

          你可以使用 return false; 这将终止您的脚本。

          【讨论】:

          • 大概只有顶层。 PHP 的 die() 可以在任何级别调用,并且会导致 PHP 解释器立即消失。
          【解决方案13】:

          这应该有点像 die();

          function die(msg = ''){
              if(msg){
                  document.getElementsByTagName('html')[0].innerHTML = msg;
              }else{
                  document.open();
                  document.write(msg);
                  document.close();
              }
              throw msg;
          }
          

          【讨论】:

            【解决方案14】:
            <script>
                 alert("i am ajith fan");
                 <?php die(); ?>
                 alert("i love boxing");
                 alert("i love MMA");
            </script>
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-02-12
              • 2011-07-12
              • 2012-10-23
              • 2011-04-28
              • 1970-01-01
              • 2012-08-19
              • 2012-11-19
              • 1970-01-01
              相关资源
              最近更新 更多