javascript - 用于检查未定义值的优雅 Javascript 代码

标签 javascript node.js coffeescript

所以我有一个提供 json 对象的回调函数:

function(object){
    var data=object.packet.link.ip.tcp.data;
    console.log(data.toString());
}

我遇到的问题是 packet/link/ip/tcp/data 中的任何一个都可以是“未定义的”——我的 node.js 程序每次遇到 undefined variable 时都会崩溃。

我尝试将“数据”的声明放入 try/catch 中,但是我不断收到“未定义”错误 - 我的猜测是我需要放入 object/object.packet/object.packet.link/object。 packet.link.ip/等。在 try/catch 中。

所以,我找到了一些优雅的 coffeescript:

if object?.packet?.link?.ip?.tcp?.data? then doStuff()

编译为:

var _ref, _ref1, _ref2, _ref3;

if ((typeof object !== "undefined" && object !== null ? (_ref = object.packet) != null ? (_ref1 = _ref.link) != null ? (_ref2 = _ref1.ip) != null ? (_ref3 = _ref2.tcp) != null ? _ref3.data : void 0 : void 0 : void 0 : void 0 : void 0) != null) {
       //doStuff:
       var data = object.packet.link.ip.tcp.data;
       console.log(data.toString());
}

讨厌!

现在它可以完美运行了,但我只是想知道是否有一种更优雅(可读)的纯 Javascript 方式来做到这一点?

最佳答案

你可以做到

["packet", "link", "ip", "tcp", "data"]
  .reduce(function (m, i) { if (m) return m[i]; }, object);

您可以将 reduce 移动到一个函数中并让 get(object, "packet", "link", "ip", "tcp", "data")。它可以很漂亮,尽管简单的 && 解决方案可能更明智。

关于javascript - 用于检查未定义值的优雅 Javascript 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26914990/

相关文章:

node.js - 带有 ids 数组的 mongoose findOneAndUpdate 回调

javascript - 获取后无法访问属性

javascript - 理论上的 Coffeescript Switch 语句难题

javascript - Firefox 扩展中的元素高度和位置

javascript - MEAN.JS 无法连接 MongoDB

javascript - 使用 Express Sessions 的 Node.js 非常基本的本地身份验证

javascript - CoffeeScript 中出现意外的 '{'

javascript - 如何从 AJV 错误中获取 "title"?

javascript - 如何更改默认的 jquery 验证对话框?

javascript - Node.js 在结束错误 zlib 后写入