为什么以“->”开头的行不会在Javascript中引发错误?

时间:2019-01-23 14:21:28

标签: syntax console.log

请考虑以下三行Java语言。

console.log(1);
--> console.log(2);
console.log(3);

我希望它会导致Syntax Error,可能类似于Unexpected token --

相反,浏览器似乎接受代码,只是忽略第二行,产生输出:

› 1
› 3

我尝试将代码段粘贴到Chrome,Safari和Firefox的控制台中。它们的行为均相同。发生了什么事?

3 个答案:

答案 0 :(得分:3)

这是旧版浏览器的HTML注释的一部分,该浏览器具有以下模式:在不支持<script>标签的浏览器中包含Javascript部分。

<script>
<!--

// some code 

-->
</script>

答案 1 :(得分:2)

显然ECMAScript正式允许"HTML like" comments

  

B.1.3类似HTML的注释

     

11.4的语法和语义扩展如下,不同之处在于,使用目标符号模块解析源代码时不允许此扩展:

import sys
print (sys.version)
# 3.6.5 |Anaconda, Inc.

import matplotlib
print (matplotlib.__version__)
# 2.2.2

! jupyter notebook --version
# 5.5.0

建议将HTMLCloseComment:: WhiteSpaceSequence opt SingleLineDelimitedCommentSequence opt --> SingleLineCommentChars opt 之后的所有内容都视为注释。

答案 2 :(得分:1)

在控制台上打扰似乎证明了Nina的情况

-->
   undefined
typeof -->
   Uncaught SyntaxError: Unexpected token >
--> = "foo"
   undefined
-->
   undefined
--<
   Uncaught SyntaxError: Unexpected token <
<--
   Uncaught SyntaxError: Unexpected token <
<!--
   undefined
<!-- foo -->
   undefined

这些关键字似乎设置为始终返回未定义。