Eam*_*orr 3 javascript node.js coffeescript
所以我有一个回调函数,它提供了一个json对象:
function(object){
var data=object.packet.link.ip.tcp.data;
console.log(data.toString());
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是任何packet/link/ip/tcp/data都可能是"未定义的" - 我的node.js程序每遇到一个未定义的变量就会失败.
我尝试将"data"的声明放在try/catch中,但是我不断收到"未定义"错误 - 我的猜测是我需要放置object/object.packet/object.packet.link/object.packet.link .IP /等.在try/catch中.
所以,我发现了一些优雅的咖啡因:
if object?.packet?.link?.ip?.tcp?.data? then doStuff()
Run Code Online (Sandbox Code Playgroud)
编译为:
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());
}
Run Code Online (Sandbox Code Playgroud)
呸!
现在它工作得很好,但我只是想知道在纯Javascript中是否有更优雅(可读)的方式吗?
你可以做
["packet", "link", "ip", "tcp", "data"]
.reduce(function (m, i) { if (m) return m[i]; }, object);
Run Code Online (Sandbox Code Playgroud)
你可以移动reduce到一个函数并拥有get(object, "packet", "link", "ip", "tcp", "data").虽然简单的&&解决方案可能更明智,但它可能很漂亮.
| 归档时间: |
|
| 查看次数: |
210 次 |
| 最近记录: |