Answer
t.me/js_testОтвет:
true, true, true, false, true
Объяснение:
Все ключи объекта конвертируются в строки(кроме Symbol). Метод hasOwnProperty принимает любой параметр и пытается конвертировать его в строку по средством вызова метода toString а уже после конвертации идёт сравнение с ключами объекта. Ещё раз, в первый раз мы передаём строку - она просто сравнивается с ключами объекта без дополнительных действий, во второй раз мы передаём число - оно конвертируется в строку по средством вызова внутреннего метода toString а в третий раз мы передаём объект в котором есть метод toString этот метод и вызывается.
В случае с Set все значения хранятся в первозданном виде и ни во что не конвертируются.
Код:
const obj = { 1: 'I', 2: 'Love', 3: 'Pizza' };
const set = new Set([1, 2, 3]);
console.log(obj.hasOwnProperty('1'));
console.log(obj.hasOwnProperty(1));
console.log(
obj.hasOwnProperty({
toString() {
return '1';
},
})
);
console.log(set.has('1'));
console.log(set.has(1));