【发布时间】:2018-10-18 19:09:45
【问题描述】:
我有这个:
EventSubscription.prototype.subscribe = function(name, fn, filters, callback) {
logger.debug('event subscriber subscribe:',{name,fn,filters});
};
我们在日志中得到了这个:
debug: event subscriber subscribe: {"name":"NotifyStaffUponReferralCreate"}
我觉得这很奇怪,因为即使我传递了未定义的参数,我也应该得到这个:
debug: event subscriber subscribe: {"name":"NotifyStaffUponReferralCreate", fn: undefined, filters: undefined}
有谁知道为什么未定义的参数不会出现在对象解构中?
我使用的是 Node 版本 v10.10.0
我做了一个小实验看看会发生什么:
const foo = undefined;
const bar = 1;
const fn = function(bar, foo) {
console.log({foo,bar});
};
fn(bar);
fn(bar, foo);
我得到了:
{ foo: undefined, bar: 1 }
{ foo: undefined, bar: 1 }
我不知道发生了什么。
【问题讨论】:
-
logger.debug- 这是什么库? -
您检查过您的
logger代码吗?和console.log一样吗?有可能它会在记录参数之前“清理”参数...... -
您的
logger似乎使用JSON.stringify(忽略函数和undefined值)而不是util.inspect,就像console那样。 -
假设您使用的是 Winston……它使用
util.format来转换对象。所以基本上:util.format('%j', {name,fn,filters}));,它不会包含未定义的值。 -
哎呀,我还以为是这样的,是的,我们正在使用的是winston。
标签: javascript node.js ecmascript-6