Not so surprisingly. Your test is being run against so called evergreen browsers, `_.keys` is just one function call to `Object.keys`.

For older browsers it will perform a double `for` loop. One `for in` loop for the `_.keys`, then the `for` loop on `listenerIds`, so it should be much slower. 

But, where is the future heading ? It's still a micro benchmark. 1000 listeners to remove is a lot I think for most cases.

FYI, `_.keys` source code:
```
_.keys = function(obj) {
    if (!_.isObject(obj)) return [];
    if (nativeKeys) return nativeKeys(obj);
    var keys = [];
    for (var key in obj) if (_.has(obj, key)) keys.push(key);
    return keys;
};
```