JavaScript中 --> 是什么意思?

5

我在任何书籍、手册或网站中都找不到这个语句的参考。据我所知,它的功能与//注释完全相同。例如:

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

将打印

1
3

我很好奇的是-->//之间是否有任何区别,如果有的话,并且为什么所有我看到的JavaScript参考资料中都完全没有--> - 我发现它仅仅因为我在Adobe Dreamweaver中不小心输入它并被标记为注释。谢谢!
编辑:这里是一个演示行为的功能性jsFiddle
编辑2:我进行了进一步测试,并发现了一些事情。
  • 只有两个破折号才有效。 ->---> 会抛出错误。
  • 只有使用“大于”符号才有效。 --< 会抛出错误。
  • 这不能在行中间或末尾工作。 console.log("1"); --> console.log("2"); 会抛出错误。

1
可能与这个众所周知的问题有关?https://dev59.com/RXI-5IYBdhLWcg3w18d3 - Blue Ice
Chrome的调试器显示存在非法字符。 - Suman Bogati
@SumanBogati 真的吗?我的 Chrome 控制台(版本 32.0.1700.107)正是按照我在帖子中描述的方式处理它。你使用的是哪个版本的 Chrome? - Hydrothermal
抱歉,那是我的错误,不再显示了,但之前可能是因为其他原因。 - Suman Bogati
2个回答

6
我猜测JavaScript引擎一如既往地宽容,因为这一行看起来像是HTML注释的结尾(<!-- -->),所以默默地忽略了它。历史上,在HTML中内联的JavaScript通常被包含在一个HTML注释中,以便不支持JavaScript的浏览器不会尝试解析它。

编辑:

我已经进行了一些研究,情况的确如此。

来自 V8 的 scanner.cc

如果在行首(前面只有空格),有HTML注释结束符'-->',则我们将该行剩余部分视为注释。这与SpiderMonkey的处理方式一致。

来自 Rhino 的 Comment.java

JavaScript 有五种注释类型:
  1. // 行注释
  2. /* 块注释 */
  3. /** jsdoc 注释 */
  4. <!-- html-open 行注释
  5. ^\s*--> html-close 行注释
前三种应该对 Java 程序员来说很熟悉。JsDoc 注释实际上只是块注释,具有一些关于注释分隔符内格式的约定。行注释和块注释在 Ecma-262 规范中有描述。 请注意,--> 注释不是 Ecma-262 规范的一部分。

-1

这不是一个注释。如果你在代码中看到它作为注释,那么它可能显示为某种悬挂的HTML注释,而不是正常的“//”。

在这种情况下发生的情况是您正在使用大于号进行比较,然后减去1。以下是一些示例...

var x = 3; var y = 3; console.log(x --> y);

false 且 x 现在为 2

如果您使用普通的注释字符“//”,则会出现语法错误(应该出现)

之所以这个代码行可以作为注释,是因为它返回为未定义。这不安全,不能用作注释。奇怪的是,在 Chrome 中它可以正常工作,如果您在行首使用“-->”。

--> something for nothing ~!@#@#%$#%^$&%^&*()_+_=-=[]\];'\||?>;';;; alert('test'),,143187132458

然而,在IE 11中,它总是一个语法错误。非常棒的发现


2
在 OP 的例子中,你看到 --> 前面有任何运算符吗?顺便说一下,-- > console.log(...)--> 之间的空格会抛出语法错误),而 console.log(x -- > y); 则不会。 - Felix Kling
-1不会因此变成false。你的表述方式是,在使用变量之后才减去-1。在比较时,x仍然是3,因此相等。var x = 3; var y = 3; console.log(x --== y);输出true。 - bicycle
只有当您执行var x = 3; var y = 3; console.log(--x > y);语句时,才为真。 - bicycle
@FelixKling,这就是我的部分观点。 //可以用作行内注释,因此我正在将其与-->进行比较,后者必须位于行的开头。作者已经编辑以反映此观点。如果这让人感到困惑,那我很抱歉。 - Paul Way

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接