gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 23:30:46 25 4
gpt4 key购买 nike

所以我有一个提供 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com