Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

JavaScript中带HTML注释?

  JavaScript和HTML是由不同的引擎负责的,它们本应是独立的系统。但是在JavaScript引擎中却有对HTML注释的解析,而且使用着一种非常令人蛋疼的解析方式,IE和现代浏览器对其的解析还有一点小小的差异。总之我无法理解这么设计的逻辑。
<script>
var i=1;
<!-- i++;
i++;
i++;
--> i++;
console.log(i);
</script>
  这个程序输出什么结果?我说输出3有人信吗?在现代浏览器中它确实是这个,只是在IE中它语法错误了。因为“-->”是合法的JavaScript运算符,IE不把它当做注释来解析。现代浏览器也只有在它前面没有其它字符(空白字符除外)时才能把它解析为注释。
  即使这么说也依然感觉有点不对劲,为什么结果是输出3而不是2呢?中间的部分不是被注释掉了吗?实际上JavaScript对HTML注释标记的解析,无论是开始标记还是结束标记都解析为单行注释,所以并不是注释标记内包含的内容被注释掉,而是一行中注释标记之后的内容被注释掉。所以,上面的代码被解析为了下面这样。
<script>
var i=1;
// i++;
i++;
i++;
// i++;
console.log(i);
</script>
  IE中虽然不会把“-->”解析为注释,但是对于它的开始标记也是生效的。 <script>
var i=1;
<!-- i++
<!-- i++
console.log(i);
</script>
  这就可以在IE中正常运行,并且中间的两个“i++”就被注释掉。
  虽然这样解析并不会造成是影响,但我无法理解设计者的想法。也许是一些历史遗留造成的吧,这种东西还是早点消灭掉比较好。
网名:
3.80.55.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^