【问题标题】:What does three semicolons in a javascript expression do?javascript表达式中的三个分号有什么作用?
【发布时间】:2011-03-17 03:50:45
【问题描述】:

我在一些表达式中看到过三重分号。
它有任何逻辑效果吗?

我见过的最接近解释的是它告诉 Dean Edwards 压缩器忽略该行。

;;; var someVar = 'Rebel';

【问题讨论】:

  • 请发布一些示例。它在不同的上下文中可能有不同的含义。
  • 代码示例?我不相信这是我遇到过的约定或特殊语法。
  • 你能举个例子吗?如果我没记错的话,;;; 等价于;,因为空语句什么都不做。我猜有人在使用;;; 来分割代码或其他东西。另外,请确保您正在阅读的代码实际上是 JavaScript :-)
  • 也许你在考虑for循环中的双分号,例如for (;;) ...
  • 是三条鳗鱼。特别是如果你的@ 靠近水(由} 表示),当你看到这些时,你会想要非常小心,除非你穿着抹了油的斗篷或长袍或光滑的斗篷,因为它们有溺水攻击可以在一轮内杀死你。

标签: javascript compression minify


【解决方案1】:

什么都没有。绝对没有。

三个分号、十个分号、一百个分号,它们都被解释为相同的结果:nothing

【讨论】:

  • 让我成为让你获得超过 10K 代表的人。 :)
  • @Gert - 我也以纳秒为单位测量时间。 :)
  • 各位,这是四核处理器的时代。真的不需要更多的时间来解析更多的分号了!天哪。
  • 这并不完全是“无”...多个分号与一个分号的作用相同,但根本不使用分号并依赖解释器的“自动分号插入”是一种不好的做法。在大多数情况下,不带分号的回车可以正常工作,但在少数情况下,结果将是意外和错误的。
  • 您说“编译”,但 Javascript 是一种解释性语言(本机)。它根本没有被编译。虽然谁知道未来会怎样;新的V8 engine 实际上确实将其编译为机器码。
【解决方案2】:

它们是空语句,没有任何效果。除非语法需要语句,否则解释器或编译器可能会删除它们。

【讨论】:

    【解决方案3】:

    它让人们在 StackOverflow 上提问。

    除此之外,它什么也不做。

    【讨论】:

      【解决方案4】:

      结束一个空语句 3 次。

      【讨论】:

      • 嗯,我想我们只知道两个空语句。我们不知道三个分号后面不是非空语句。
      • 我对这个问题的解读是,发布的代码是“他见过的最接近的东西”,不一定是他“在这里和那里见过”的例子之一。 OP 的代码清楚显示的四个分号中只有两个空语句。
      • @user107463 你能对此发表评论吗?
      【解决方案5】:

      以三个分号开头的行用于调试代码:它表示这些行不应出现在生产环境中。 Javascript 通过压缩器或其他算法运行,在创建优化的 JS 文件时删除 ;;; 行。

      ;;; console.log("only run this line when debugging!");
      

      如上所述,三个分号实际上在 Javascript 中没有任何作用:它只是结束三个连续的空语句。如果使用了实际的评论

      // console.log("only run this line when debugging!");
      

      然后,当您想进入调试模式时,您必须进入并手动删除所有 cmets,然后在完成后进入并放回它们。另一种解决方案是创建一个DEBUG 变量并将所有调试行包装在一个条件中:

      var DEBUG = true;
      if(DEBUG){
           console.log("only run this line when debugging!");
      }
      

      但这有点麻烦,实际上会在您的 Javascript 文档中添加不需要的代码。当然你可以通过压缩器运行JS来去掉DEBUG的条件,但是此时你还不如直接使用;;;的方法,这样更简单。

      请参阅this question 以获取真实生活中的示例。顺便说一句,我认为语法来自emacs

      【讨论】:

      • 超过 1k 的方法。
      • 看来grunt-contrib-uglify 不会删除这个。
      • 大多数压缩器不会自动删除以;;;开头的行,这只是一些专业软件使用的约定。
      猜你喜欢
      • 2020-02-15
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      • 2011-10-19
      • 2011-12-06
      相关资源
      最近更新 更多