javascript - javascript 中的 If/else 不返回未定义的 else

标签 javascript node.js facebook

我 3 周前才开始学习 JS,所以我可能会忽略一些简单的东西。 我正在尝试使用 npm 模块周期表和 facebook-chat-api 制作一个 Facebook 化学机器人(荷兰语)。 除了获取摩尔重量外,每个基于元素周期表的函数都运行良好。如果我输入不是分子的东西,它不会转到 else 语句,而对于我的所有其他情况,这确实会发生。是这样的:

case 'mw':

    var regex = /((Uu[a-z]|[A-Z][a-z]?)\d*)/g;
    var mol = (commandText.match(regex) || []).join(' ');

    if(util.atomicMass != undefined && util.atomicMass(mol) != undefined) {
        api.sendMessage("De molaire massa van " + commandText + " is: " + util.atomicMass(mol) + " g/mol", event.threadID)

    }
    else {
        api.sendMessage("Fout, onjuiste opmaak", event.threadID)

    }

    break;

我也试过

if (util == undefined || (util.atomicMass != undefined && util.atomicMass(mol) != undefined)) {

相反,但没有运气。

我得到的错误是:

ERR! ERROR in listen -->  TypeError: Cannot read property 'atomicMass' of undefined
ERR! ERROR in listen -->      at C:\Users\Bd\node_modules\periodic-table\util.js:16:54

虽然我确实在开头定义了 util,但它可以很好地处理现有的分子。使用无意义的输入,它不会给我想要的错误。 console.log(util) 给我 { atomicMass: [Function: atomicMass] } 所以它被定义了。

我的整个代码是: http://pastebin.com/6u2bMbXF

或者 util 本身可能有问题,为什么这不起作用?

编辑:

   if (typeof util.atomicMass(mol) == "object") 

也不行。

最佳答案

使用try ... catch声明。

您的代码示例:

try {
  api.sendMessage("De molaire massa van " + commandText + " is: " + util.atomicMass(mol) + " g/mol", event.threadID);
} catch (e) {
  if (e instanceof TypeError) {
    api.sendMessage("Fout, onjuiste opmaak", event.threadID);
  } else {
    throw e;
  }
}

检查和抛出不是必需的,您可以只记录所有异常并始终向用户发送相同的文本。

PS:我不确定它是否在 JS 中很常见,它更像 Pythonic 方式(EAFP)

关于javascript - javascript 中的 If/else 不返回未定义的 else,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36283929/

相关文章:

javascript - 正则表达式 : Using an anchor with positive lookbehind

javascript - 为什么在 windows.onload 事件处理程序中创建的范例不是全局可见的?

javascript - 在 Windows Phone 上禁用双击缩放

node.js - `repository.create` 去除既是数组又是嵌入对象的列的值

c++ - 在 NodeJS 中将 Raw 流转换为 Wav 流

ios - 如何在适用于 iOS 的 Facebook SDK 中定义 "GeoPoint"属性

android - 如何通过 Android 的 facebook api 将用户导航到 facebook 页面?

javascript - 如何在 Python 中使用 Javascript 对象文字

node.js - Backbone 从集合中删除()

asp.net - facebook api 版本 2.4 不从 owin facebook 身份验证选项返回电子邮件?