Что выведет код? Скрипт запускается как обычный файл Node (CommonJS, не строгий режим). Запишите строки по порядку, по одной на строку.
В работе: Телефон продавца на Авито показывают только по кнопке; объект объявления отдают виджетам через Proxy, чтобы номер случайно не попал в аналитику.
Как проверяем
Код не запускаем — предскажите вывод. Пишите строки по порядку, по одной на строку; пробелы по краям не важны. Ответ один на подход: после него показываем разбор.
Источник: на задачах Авито: карточка объявления, скрытый телефон. Условие пересказано своими словами.
Давали на собеседовании?
const ad = { title: 'Велосипед Stels', price: 12000, _ownerPhone: '+79161234567' };const log = [];const safe = new Proxy(ad, {get(t, k, r) {if (typeof k === 'string') log.push('get ' + k);if (typeof k === 'string' && k.startsWith('_')) return undefined;return Reflect.get(t, k, r);},set(t, k, v) {log.push('set ' + k);if (k === 'price' && v < 0) return false;return Reflect.set(t, k, v);},has(t, k) { return !k.startsWith('_') && k in t; },ownKeys(t) { return Reflect.ownKeys(t).filter((k) => !k.startsWith('_')); },});console.log(safe._ownerPhone, '_ownerPhone' in safe, Object.keys(safe).join(','));safe.price = -5;console.log(ad.price);try { (function () { 'use strict'; safe.price = -5; })(); } catch (e) { console.log(e.constructor.name); }log.length = 0;console.log(JSON.stringify(safe));console.log(log.join(' | '));const copy = { ...safe };console.log(Object.keys(copy).length, ad === safe, safe.hasOwnProperty('_ownerPhone'));