const elPassword = document.querySelector('.password');
document.querySelector('img')
.addEventListener("click", () => {
elPassword.setAttribute(
"type",
elPassword.getAttribute("type") === "password" ? "text" : "password")
});
По клику всегда меняем атрибут. Вопрос лишь в том, на какое значение. // сократить актёров
"актёры".replace(/ы$/, "") // актёр
// но сохранить животных
"Животные".replace(/ы$/, "") // Животные
indexOf()
, который возвращает -1
если не найдено, или индекс от 0
и больше.-1
или иное значение. Можно просто сравнивать if (a.indexOf(b) > -1) { /* найдено! */ }
но иногда хочется короче.~
хорош тем, что выделяет -1
: только -1
с этим оператором даст 0
. Прочие числа дадут какое-то ненулевое значение.~(-1) === 0
0
и больше получилось тоже ненулевое число, и !!
даст true
-1
получится уникальный 0
, и !!0
вернёт false
[ 06:00, 18:00 ]
От них две середины — и полдень и полночь – одинаково удалены: куда рванём?(x, y)
координат. Считать среднее из этих точек, и считать угол, указывающий на «среднюю» точку:name
и age
указывают на массивы, а они, как и любые объекты в JavaScript, передаются «по ссылке», т.е. передаётся указатель на место в памяти, где лежит массив. Прочитайте по ссылке «по ссылке» : ) — там действительно подробно и с картинками описывают проблему.this.save
оказываются те же самые массивы, что и в obj
. Меняете там, меняется тут, и наоборот. Разорвать порочную связь можно, например, грубоватым и не самым эффективным способом:const obj_copy = JSON.parse(JSON.stringify( obj ));
// создали действительно независимую «глубокую копию» объекта
Для нехитрого объекта без функций-методов и всяких Map/Set'ов это годится. const TIMEOUT = "TIMEOUT";
for (let i=0; i < 300; i++) {
await Promise.any([
Order(i), // то самое стороннее апи
new Promise((resolve) => setTimeout(() => resolve(TIMEOUT), 3 * 6e4))
])
.then((result) => {
if (result === TIMEOUT) {
console.log(TIMEOUT);
} else {
console.log("Order fulfilled");
}
})
}
b.style.width = 5 + 'px';
(function (){
let a = 75; // видимо, начальная ширина?
const out = document.querySelector('.out-1');
const update = (delta = 0) => out.style.width = `${a += delta}px`;
update();
document.querySelector('.btn1')
.addEventListener('click', () => update(10));
// так можно добавить вторую кнопку для укорачивания:
document.querySelector('.btn2')
.addEventListener('click', () => update(-10));
})();
parentNode
— лишнее дублирование инфы.{ id: 1, address: [0], children: [
{ id: 2, address: [0, 0], children: [
{ id: 3, address: [0, 0, 0], },
{ id: 99, address: [0, 0, 1], },
{ id: 999, address: [0, 0, 2], },
]}
]}
Map()
: [0]: {title: 'первый', id: 1, }, // поле children убрали
[0, 0]: { title: 'второй', id: 2 },
[0, 0, 0]: { title: 'третий', id: 3 },