Thefor...instatement iterates over all enumerable properties of an object
that are keyed by strings
(ignoring ones keyed by Symbols),
including inherited enumerable properties.
const m = new Map();
m.set({}, 'obj');
m.set('a', 'A');
// это другое
m.b = 'B';
for (let prop in m) {
console.log('property', prop);
}
// property b import produce from "immer"
const nextState = produce(this.state, draft => {
// тут можно всё менять, не беспокоясь об иммутабельности
const { catValue } = draft;
catValue.cat.colors = Color.BLACK;
});
this.setState(nextState);import produce from "immer"
const { catValue } = this.state;
const nextCatValue = produce(catValue, draft => {
// тут можно всё менять, не беспокоясь об иммутабельности
catValue.cat.colors = Color.BLACK;
});
this.setState({ catValue: nextCatValue });cloneNode() сработает только если слушатели прописаны прямо в атрибутах элемента <a onclick="alert('Habr')">click me</a>addEventListener() скопировать можно примерно никак.function myClickHandler(event) {
// что-то сделать по поводу клика
}
element1.addEventListener('click', myClickHandler);
element2.addEventListener('click', myClickHandler);
element3.addEventListener('click', myClickHandler);<div id="parent">
<button>1</button>
<button>2</button>
<button>3</button>
</div>и слушать клики на div#parent Для того, чтобы объект был итерируемым, в нем должен быть реализован метод@@iterator, т.е. этот объект (или любой из объектов из его prototype chain) должен иметь свойство с именемSymbol.iterator:
Свойство:[Symbol.iterator]
Значение: Функция без аргументов, возвращающая объект, соответствующий iterator protocol.
{ next() { /* ... */ }}, или, как в вашем примере, метод next() определён на самом объекте, поэтому возвращается this.[...Collection.values()].sort((a, b) => a.guild.raw - b.guild.raw).pop()Map. Привести его значения к массиву. Отсортировать по значению guild.raw по возрастанию. Взять последний объект – он с наибольшим значением raw.[...Collection.values()]
.reduce((max, current) => max.guild.raw > current.guild.raw ? max : current) Стрелка=>ничего не привязывает. У функции просто нетthis.
При получении значенияthis– оно, как обычная переменная, берётся из внешнего лексического окружения.
const obj = {
w() {
console.log('w', this);
},
x: function () {
console.log('x', this);
},
y: this,
z: () => {
console.log('z', this);
},
};
obj.w(); // obj
obj.x(); // obj
console.log('y', obj.y); // Window
obj.z(); // Windowthis тот же, что и снаружи:const a = this; // Window
const obj = {
b: this, // тоже Window
}
a === obj.b // true (function toster() {
console.log(toster);
})(); { "кришна": 4, "харе": 4, ":-O": 1 }Оставить только те, где значения 1. Собрать в массив.const unique = arr => arr.filter((item, i) => i === arr.indexOf(item) && i === arr.lastIndexOf(item)); let offset = 0;
async function requestAndTreatment() {
// ...
const point = res.data[offset++];
data.addData([[res.timestamp, point.open, point.high, point.low, point.close]]);
}second,const timerObject = {
DATE: new Date(),
listDATE: {
get second() {
return new Date().getSeconds();
},
},
};
// читать, как обычно
console.log( timerObject.listDATE.second );
// через секунду
setTimeout(() => console.log( timerObject.listDATE.second ), 1000); // на 1 большеconst timerObject = {
DATE: new Date(),
listDATE: {
second: () => new Date().getSeconds(),
},
};
// использование
console.log( timerObject.listDATE.second() ); typeof arg === 'string'
// ещё можно длину проверить, а то, вдруг длинное пришлют
arg.length === 1arg.toLowerCase() !== arg.toUpperCase()
// строка перевелась в разные кейсыarg.toUpperCase() === arg // значит, буква в верхнем регистреa, а что за b?» не самый удачный: в примере аргументы игнорируются.document.querySelector("#******") вернёт undefined, и попытка получить из него свойство innerText выкинет ошибку. Загляните в консоль.const el = document.querySelector("#******");
if (el) {
const a = el.innerText;
if (a.length === 0) {
el.value = "123"; // а что это за элемент, у которого и innerText и value ?
}
} 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() отрабатывает сразу и выполнение идёт дальше. Но этот вызов не выполняет, а лишь откладывает на потом – задачу вызова какой-то функции с параметрами.