diff --git a/lib/events.js b/lib/events.js index e8fd3bbb79259e..50cc720b1247ba 100644 --- a/lib/events.js +++ b/lib/events.js @@ -276,12 +276,6 @@ ObjectDefineProperty(EventEmitter, 'defaultMaxListeners', { }, }); -function hasEventListener(self, type) { - if (type === undefined) - return self._events !== undefined; - return self._events !== undefined && self._events[type] !== undefined; -}; - ObjectDefineProperties(EventEmitter, { kMaxEventTargetListeners: { __proto__: null, @@ -675,11 +669,13 @@ EventEmitter.prototype.removeListener = function removeListener(type, listener) { checkListener(listener); - if (!hasEventListener(this, type)) + const events = this._events; + if (events === undefined) return this; - const events = this._events; const list = events[type]; + if (list === undefined) + return this; if (list === listener || list.listener === listener) { this._eventsCount -= 1; @@ -733,9 +729,9 @@ EventEmitter.prototype.off = EventEmitter.prototype.removeListener; */ EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) { - if (!hasEventListener(this)) - return this; const events = this._events; + if (events === undefined) + return this; // Not listening for removeListener, no need to emit if (events.removeListener === undefined) { @@ -780,10 +776,14 @@ EventEmitter.prototype.removeAllListeners = }; function _listeners(target, type, unwrap) { - if (!hasEventListener(target, type)) + const events = target._events; + + if (events === undefined) return []; - const evlistener = target._events[type]; + const evlistener = events[type]; + if (evlistener === undefined) + return []; if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener]; diff --git a/test/parallel/test-event-emitter-listeners.js b/test/parallel/test-event-emitter-listeners.js index eb1da829c95f21..4a08ad34c273cd 100644 --- a/test/parallel/test-event-emitter-listeners.js +++ b/test/parallel/test-event-emitter-listeners.js @@ -86,6 +86,11 @@ function listener4() { assert.deepStrictEqual(ee.listeners('foo'), []); } +{ + const ee = new events.EventEmitter(); + assert.deepStrictEqual(ee.listeners(), []); +} + { class TestStream extends events.EventEmitter {} const s = new TestStream();