【问题标题】:Node doesn't allow if statements without braces?Node不允许没有大括号的if语句?
【发布时间】:2013-09-13 18:32:45
【问题描述】:

发生了一些奇怪的事情。我刚刚升级到节点 v0.10.18。我的一个测试在一个意想不到的地方失败了。看起来我不能再做没有大括号的 if 语句了。

if(false)
    console.log('shouldn't be printed');

在上面的示例中,即使 if 语句失败,也会打印文本。但未在以下测试中打印;

if(false) {
     console.log('shouldn't be printed');
}

if(false) console.log('shouldn't be printed');

我有什么遗漏吗,node 一直都是这样吗?

编辑:我刚刚注意到只有在使用 mocha 时才会发生这种情况。代码在节点中运行正常。任何想法如何使用 mocha 发生这种情况?

EDIT2:感谢各位的回答,我的示例很简单,实际上 mocha 会深入到我目录中的文件中,但是当我使用 node-inspector 单步执行代码时,我看到了即使那些 if 语句的计算结果为 false,它也会进入下一行并执行回调行,这会中断我的调用。我无法在其他任何地方重新创建它,但我对它是如何发生的感到目瞪口呆

EDIT3:好的,伙计们,除了告诉你我看到它发生在哪里之外,我无法重现这个问题。我只是想在这里为一个开源项目做贡献https://github.com/jugglingdb/mysql-adapter 在 lib/mysql 的最后几行(大约 10 行左右)(下面链接),它检查 filter.where 和 filter.update,这就是问题发生的地方。如果我添加大括号,测试将通过,如果不添加则不会

https://github.com/jugglingdb/mysql-adapter/blob/master/lib/mysql.js 890 行在这里

测试它在哪里执行: https://github.com/jugglingdb/mysql-adapter/blob/master/test/migration.test.js 第 291 行 .. 它不存在,但检查 err 将返回第 890 行抛出的错误

【问题讨论】:

  • 我认为你的例子是错误的。
  • 我建议您始终使用 {}if 语句,但这只是我。
  • 只有在if(false) 后面有分号时才会发生这种情况。你确定这是你的确切代码?
  • 显示准确的代码。你的例子没有问题。
  • 如果这种情况只发生在 mocha 上,那么 mocha 就是 broka。

标签: javascript node.js mocha.js


【解决方案1】:

该项目使用了一个名为semicov 的模块,并将分号放在 if 行之后。实际上在项目本身中已经注意到,有人破坏的提交以某种方式进入了回购

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 2023-01-16
    • 2019-12-10
    • 1970-01-01
    相关资源
    最近更新 更多