const obj = { name: 'Boris', age: 5};
// переназначить свойство с геттерами и сеттерами
// ниже очччень сокращённый пример
Object.defineProperty(obj, "name", {
set(newName) {
console.log("Name changed to", newName);
}
});
// проверяем:
obj.name = "Toster"; // в консоль выведет "Name changed to Toster"
на деле нужно сохранить начальное значение, где-то хранить значение свойства name
, и добавить геттер. Т.к. вероятно, не единственное свойство захочется так подменить, лучше будет воспользоваться «оптовым» Object.defineProperties() или в цикле по свойствам объекта каждое сделать Object.defineProperty()
forEach()
querySelectorAll()
возвращает статичный набор.forEach()
, или же получать динамическую коллекцию, используя соотв. метод.
- Статусы заказа (открыт/выпущен/закрыт и т. п.)
- Статусы сборки заказа (ожидает сборки, сборка начата, сборка проверена, сборка завершена)
Формула оплаты заказа (тут много вариантов)- Фонд оплаты (собственные средства, федеральный бюджет, территориальный и т. п.))
- Внутренний клиент (одно из возможных внутренних ООО)
- Ответственный сотрудник
- Территориальный сектор
- Направление
showNumber(1)
showNumber(1)
- вывела в консоль "1", и зарядила новый таймаут, уже с showNumber(2)
. Убедились, что 2 не равно 6.showNumber(2)
, вывели в консоль "2", зарядили таймаут (3)showNumber(5)
6 === 6
, и раз так — тут же гасит свежезаряженный таймаут, ибо нечего ему срабатывать.setTimeout()
. Вызов setTimeout()
отрабатывает сразу и выполнение идёт дальше. Но этот вызов не выполняет, а лишь откладывает на потом – задачу вызова какой-то функции с параметрами. undefined
)const users = [
{name: 'Ann'},
{name: 'George'},
{name: 'Rebecca'}
];
if (users.find(user => user.name === 'Rebecca')) {
// уже есть такой юзер
} else {
// добавляем
}
setTimeout()
:setTimeout(console.log(p), 6000);
здесь передаётся результат вызова console.log()
setTimeout(console.log, 6000, p);
console.log
, которую setTimeout()
вызовет с аргументом p
через 6 секунд. const data = [];
document.querySelectorAll('.item_row').forEach(row => {
const region = row.querySelector('.item_region > a')?.textContent?.trim();
if (region !== 'Минск') return;
const name = row.querySelector('.title')?.textContent;
const link = 'https://zooby.by/' + row.getAttribute('href');
data.push({ name, link });
});
input
работает не с числами, а с текстом — строками.const input = document.querySelector('.input');
input.addEventListener('input', event => {
const { target } = event;
const { value } = target;
const last = value.slice(-1);
target.value = last.match(/[1-6]/) ? last : '';
});
li
содержится последний созданный элемент.const clickHandle = () => {
// ...
};
for (let i = 0; i < count; i++) {
const li = createGameElement(newArr[i]);
const { item } = li;
ul.append(item);
item.addEventListener('click', clickHandle);
}
/**
* My item definition
* @typedef {Object} myItem
* @property {string} date
* @property {string} id
*/
/**
* Find item with the date of today
* or the nearest one in the future
* @param {myItem[]} data
* @returns {?myItem}
*/
const getNearest = data => {
const now = new Date();
const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
const index = data
.map(({date}, orginalIndex) => {
const [d, m, y] = date.split('/');
return { sorter: new Date(y, m - 1, d), orginalIndex };
})
.sort((a, b) => a.sorter - b.sorter)
.find(item => item.sorter >= today)
?.orginalIndex;
return data[index] || null;
}
// использование
const data = [
{ date: '01/01/2022', id: '1' },
{ date: '31/03/2022', id: '2' },
{ date: '23/05/2022', id: '3' },
{ date: '05/04/2022', id: '4' },
{ date: '03/04/2022', id: '5' },
{ date: '09/04/2022', id: '6' },
];
getNearest(data) // { date: "03/04/2022", id: "5" }
===
выражения в switch()
с очередным case
должно дать true
, чтобы выполнился код в этом case
.var = true
а в остальных случаях будет срабатывать default
. Наверное, не совсем то, что хотелось?