// сократить актёров
"актёры".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 },
var url = '?email=email@mail.ru&login=1298384';
const params = new URLSearchParams(url); // начальный знак ? игнорируется
params.get("email") // "email@mail.ru"
params.get("login") // "1298384"
${ }
можно помещать не любой код, а выражения. Что-то, имеющее значение: `Привет, ${ ["м", "р"].join("и") }!`
audio
наследует свои свойства и методы от HTMLMediaElement. Например, можно читать или устанавливать его свойство volume.function test({ a = "Aa", b = "bar", c = "Цеце" }) {
console.log({a, b, c});
// что-то делаем с переменными a, b, c:
console.log(`${a} ${c} пошла в ${b}`);
}
test({ a: "100" }); // { a: "100", b: "bar", c: "Цеце" }
// 100 Цеце пошла в bar
// auth.js
var myAuth = "secret";
// logic.js
function logic() {
console.log(myAuth);
}
<script>
var myAuth = "secret";
function logic() {
console.log(myAuth);
}
</script>
Поэтому все друг друга видят, слышат и дружат )const mondaySunday = (d) => d.getDay() || 7; // чтоб воскресенье не 0, а 7
const getShortWeek = (d, last = false) => {
const D = new Date(d.getTime()); // копия, чтобы ориг. дату не сбить
D.setDate(1); // 1-й день месяца
if (! last) return 7 - mondaySunday(D);
D.setMonth(D.getMonth() + 1); // добавить месяц
D.setDate(D.getDate() - 1); // отнять день
return mondaySunday(D);
}
const leastDays = (d) => Math.min(getShortWeek(d), getShortWeek(d, true));
leastDays(new Date(2021, 10, 10)) // 2