失踪 ”;”声明前

时间:2019-05-28 14:37:17

标签: javascript syntax syntax-error node-red

我不知道我在语法上哪里写错了,请帮忙。错误在第一行。在做第一行之前,我做了其他所有事情,但在做错之前并没有错误。

    String msg.payload2 = msg.payload.toLowerCase();
if (msg.payload2 == "-coinflip") {
    rnd = Math.floor (Math.random() * (2-0));
    if (rnd == 1) {
        msg.payload = "Heads";
    } else {
        msg.payload = "Tails";
    }
}
return msg.payload

2 个答案:

答案 0 :(得分:4)

msg已经是一个对象,因此您可以添加属性而无需进一步声明。并且不需要在JS中将变量强制转换为任何东西。

您的代码应为:

msg.payload2 = msg.payload.toLowerCase();
if (msg.payload2 == "-coinflip") {
    rnd = Math.floor (Math.random() * (2-0));
    if (rnd == 1) {
        msg.payload = "Heads";
    } else {
        msg.payload = "Tails";
    }
}
return msg.payload

答案 1 :(得分:0)

JavaScript是松散类型的。访问对象上的属性时,应使用语法msg.payload2payload2对象接收属性msg中包含的值。但是,如果该属性不存在,则payload2属性将返回未定义。这就是为什么您的代码在添加示例的第一行之前起作用的原因。

此行:

if (msg.payload2 == "-coinflip")

如果未定义false属性,

将始终求值为payload2

当您在其中添加代码段的第一行时,它不起作用的原因;是您正在尝试使用JS引擎无法理解的语法为JavaScript中的对象属性提供类型,并将抛出SyntaxError

编辑:

let msg = { payload: '' }; // assuming this is an object defined higher up. I've placed this here for more context
let result;
msg.payload2 = msg.payload && msg.payload.toLowerCase(); // This line also protects against trying to lowercase an undefined payload
if (msg.payload2 == "-coinflip") {
    rnd = Math.floor (Math.random() * (2-0));
    if (rnd == 1) {
        result = "Heads";
    } else {
        result = "Tails";
    }
}
return result;

我不考虑此生产代码,但它将使您的应用程序运行。