You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node-RED函数节点if条件null值判断失效问题排查

问题拆解与修正方案

咱们来一步步揪出你代码里的问题,其实就是两个容易忽略的JavaScript细节:

1. key被赋值成了数组,不是单个键名

Object.keys(res[0])返回的是包含所有键名的数组,哪怕你的对象只有一个pressure键,它返回的也是["pressure"],而不是字符串"pressure"。你直接把这个数组赋值给key,后续用它操作的时候自然会出问题。

赶紧把这行改成取数组的第一个元素:

key = Object.keys(res[0])[0]; // 这样key就变成了"pressure"这个字符串

2. 多余的双层数组包裹[[key]]

你写的res[0][[key]]是把key又套了一层数组当属性键,这完全是画蛇添足:

  • 如果key还是数组(没改之前),[[key]]就是个二维数组,JavaScript会把它强制转成字符串当键用。这时候你访问的其实是res[0]["[object Object]"](或者其他奇怪的字符串),得到的结果是undefined。而在JS里undefined != null的结果是true,这就解释了为什么不管pressure是不是null,都会跑进if语句里。
  • 就算key已经改成了单个字符串,[[key]]也是多余的数组包裹,虽然最终能访问到正确属性,但写法非常混淆。

正确的访问方式应该直接用key:

if(res[0][key] !== null) { // 建议用严格不等!==,避免隐式类型转换的坑
    console.log(`res: ${key}:${res[0][key]}`); // 用模板字符串输出更清晰
}

修正后的完整代码

res = dataTransform.transform(); // 关键场景:res = [{"pressure":null}];
const key = Object.keys(res[0])[0];
if(res[0][key] !== null) {
    console.log(`res: ${key}:${res[0][key]}`);
} else {
    console.log(`res: ${key} is null`);
}

为什么控制台输出res: 0:[object Object]?

没改之前,key是数组["pressure"],你写的[key]是把这个数组又套了一层,变成[["pressure"]]。和字符串拼接时,数组会调用toString()转成字符串,但如果你的数据结构或者key的取值和预期有偏差(比如res[0]的键是数字0),就会出现这种奇怪的输出。修正key的取值和访问方式后,这个问题就会消失啦。

内容的提问来源于stack exchange,提问作者Gianluca Petralia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:07:30