我不知道我在语法上哪里写错了,请帮忙。错误在第一行。在做第一行之前,我做了其他所有事情,但在做错之前并没有错误。
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
答案 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.payload2
从payload2
对象接收属性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;
我不考虑此生产代码,但它将使您的应用程序运行。