Одной из причин, по которой Map.has
может быть предпочтительнее, может быть случай, если ключ существует, но значение ложно.Если вы используете Map.get
, вам также необходимо проверить, является ли значение === undefined
(и даже это не гарантирует, что ключ не существует - ключ может существовать, но имеет значение undefined
):
// Not good enough:
const map = new Map();
map.set('foo', 0);
if (map.get('foo')) {
console.log('Map has "foo" key');
}
// Better, but not foolproof:
const map = new Map();
map.set('foo', 0);
map.set('bar', undefined);
const valAtFoo = map.get('foo');
if (valAtFoo !== undefined) {
console.log('Map has "foo" key');
}
// Incorrect:
const valAtBar = map.get('bar');
if (valAtBar !== undefined) {
console.log('Map has "bar" key');
}
// Solution: use map.has instead of map.get
const map = new Map();
map.set('foo', 0);
map.set('bar', undefined);
if (map.has('foo')) {
console.log('Map has "foo" key');
}
if (map.has('bar')) {
console.log('Map has "bar" key');
}
Вы будете использовать Map.has
по той же причине, по которой вы будете использовать Object.prototype.hasOwnProperty
для проверки того, обладает ли объект определенным свойством - используйте obj[prop]
, чтобы проверить,prop
существует, просто не достаточно хорош в некоторых случаях.
Это не проблема производительности, скорее потому, что в некоторых случаях просто нет другого пути .(.has
также более читабелен, хотя вы сказали, что игнорируете эту часть)