提问人:codetuner 提问时间:12/11/2015 更新时间:12/11/2015 访问量:87
为什么 /* */ 注释的行为不同?Javascript 错误?
Why does /* */ comment behave differently ? Javascript bug?
问:
这真的很奇怪。为什么 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 中的错误吗?
答:
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
评论