storage
умеет хранить только строки текста. Поэтому - sessionStorage.setItem('user', {level: '1'})
+ sessionStorage.setItem('user', JSON.stringify({level: '1'}));
и- console.log(Object.keys(sessionStorage.getItem('user'))
+ console.log(Object.keys(JSON.parse(sessionStorage.getItem('user')))
function func(mixedData) {
const id = mixedData?.target?.id ?? mixedData;
console.log(id);
}
func(123) // 123
func({target: {id: 456}}) // 456
?.
— optional chaining??
— Nullish coalescing operatorresult
накапливает строку, и потом функция её возвращает.let result = '';
// ""
result = `${result}${i}`;
// "1"
// ...
// "1"
result = `${result}${i}`;
// "12"
// ...
// "123"
// "1234"
// "12345"
return result;
Поэтому если присвоить переменной результат выполнения этой функции, получится что-то типа:let digits = joinNumbersFromRange(0, 9);
// в переменной digits теперь "0123456789"
active
,start
до finish
. start
и домножать, начиная со следующего start + 1
:const multiplyNumbersInRange = (start, finish) => {
let result = start;
let i = start + 1;
while (i <= finish) {
result *= i;
i += 1;
}
return result;
};
multiplyNumbersInRange(1, 3); // 1 * 2 * 3 = 6
start === finish
) function getValue() {
return new Promise(resolve => setTimeout(() => resolve(123), 2000))
.then(data => data * 2);
}
Как вы получите значение 246 из этой функции «в переменную»?const categories = {
mass: 'Масса',
distance: 'Расстояние',
temperature: 'Температура',
time: 'Время',
speed: 'Скорость',
currency: 'Валюта',
};
const categories = {
mass: { title: 'Масса', element: null, data: null, },
distance: { title: 'Расстояние', element: null, data: null, },
temperature: { title: 'Температура', element: null, data: null, },
time: { title: 'Время', element: null, data: null, },
speed: { title: 'Скорость', element: null, data: null, },
currency: { title: 'Валюта', element: null, data: null, },
};
mass
у вас.Object.entries(categories).forEach(([ name, item ]) => {
const el = document.createElement('div'); // это внешний div кнопки
// el.classList.add(...)
el.insertAdjacentHTML('beforeend', `
<p class="value-item__title">${item.title}</p>
<img src="assets/img/values/${name}.svg" alt="" class="svg-icon value-item__img">
`);
el.addEventListener('click', () => clickHandler(name));
// по этому name можно вытащить categories[name]
divValues.appendChild(el);
});
onclick="calc.txt.value+=
txt.value
, кнопки вызывали общую функцию: onclick="clicked('*')"
. И напшите эту функцию, которая на вход получает символ, и дальше решает, что с ним делать. Например, сначала берёт существующее значение txt.value, смотрит на его последний символ, и либо добавляет, либо заменяет его.только на первую кнопку...
querySelector
querySelector()
находит и отдаёт первый элемент, подходящий селектору. Остальные остаются вне игры.querySelectorAll()
выберет все подходящие. Но потом коллекцию (NodeList) надо обходить циклом. Например, querySelectorAll(...).forEach(item => что-то-сделать-с-item)
.button.btn-more
, дальше исходя из этой кнопки находить в DOM-дереве ближайшие элементы, которым надо менять классы. Делегирование событий. game:
while (true) {
const Game = {
countAttempts: 0,
wordsList: ['javascript', 'python', 'computer', 'aboba'], //слова, которые надо отгадывать
badLetters: [], //буквы, которые не были найдены в слове
rndWordChoice: function () {
//рандомайзер для выбора слова
return this.wordsList[Math.floor(Math.random() * this.wordsList.length)];
},
};
let word = Game.rndWordChoice();
let underlineWord = '_'.repeat(word.length);
round:
while (true) {
alert(`Угадайте слово - ${underlineWord}\nБукв в слове - ${underlineWord.length}\nНеудачных попыток - ${Game.badLetters.length}`)
const userInput = prompt('Введите букву:');
if (userInput == null) break game;
if (userInput.length !== 1) {
alert('Нужна ровно 1 буква');
continue;
}
const letter = userInput.toLocaleLowerCase();
if (word.includes(letter)) {
let index = word.indexOf(letter);
while (index > -1) {
underlineWord = underlineWord.substring(0, index) + letter + underlineWord.substring(index + 1);
index = word.indexOf(letter, index + 1);
}
} else {
Game.badLetters.push(letter);
}
}
}