为什么 /* */ 注释的行为不同?Javascript 错误?

Why does /* */ comment behave differently ? Javascript bug?

提问人:codetuner 提问时间:12/11/2015 更新时间:12/11/2015 访问量:87

问:

这真的很奇怪。为什么 fx2 返回“undefined”,而 fx1、fx2 和 fx3 正确返回“true”?

<script>

  function fx1(item) {
    return (item.a == 1)
        && (item.b == 1);
  }

  function fx2(item) {
    return /*(item.a == 1)
        && */(item.b == 1);
  }

  function fx3(item) {
    return true//(item.a= 1)
        && (item.b == 1);
  }

  function fx4(item) {
    return (item.b == 1);
  }

  alert(fx1({a: 1, b: 1}));
  alert(fx2({a: 1, b: 1}));
  alert(fx3({a: 1, b: 1}));
  alert(fx4({a: 1, b: 1}));

</script>

http://www.codetuning.net/temp/commentedwherejsbug.html 上在线试用

当然,这是我原始代码的简化版本,只是为了重现这个单一的问题。最初我有 fx1,然后我认为可能不需要第一个条件(测试 item.a),我把它注释掉了,就像在 fx2 中一样。为什么这不起作用??fx3 和 fx4 按预期工作,它们都返回 true,但 fx2 返回 undefined。

在 IE11 和 Chrome 47 上测试。

有人可以说服我这不是 Javascript 中的错误吗?

JavaScript 注释

评论

2赞 Bhargav Rao 12/11/2015
不敢相信你没有看过这个最奇怪的语言功能:)
0赞 codetuner 12/11/2015
谢谢!虽然,我不知道我是否喜欢称它为语言功能......这绝对不是我会在谷歌上搜索;)凉!

答:

2赞 Ramanlfc 12/11/2015 #1
function fx2(item) {
    return /*(item.a == 1)
        && */(item.b == 1);
  }

JavaScript 会自动将 .将所有 return 语句放在同一行上。喜欢;return

 return (item.a == 1) && (item.b == 1);

评论

0赞 codetuner 12/11/2015
嘿,非常感谢,这似乎是一个合理的解释。不过,仍然是一个 Javascript 语法/解析器错误,/* 和 */ 应该可以跨过多行,不是吗?他应该意识到这一点,并注意到返回线还没有结束......
0赞 Ramanlfc 12/11/2015
@codetuner不幸的是,这是JS的“功能”mislav.net/2010/05/semicolons