ffmpeg \
-i 1.gif \
-i 2.gif \
-filter_complex vstack \
result.gif
Array.from(employees, ({name, age}) => `Имя: ${name}, возраст: ${age}`)
createCounter()
создаёт и возвращает новую функцию. С которой в комплекте идёт свой новый «чемодан» замыкания, в котором лежит своя переменная counter
. откуда беретсяcounter
при втором вызовеconsole.log(z())
createCounter()
класс1 И класс2
— чтобы непременно оба были в наличии у элемента, и тогда только его брать;класс1 ИЛИ класс2
— достаточно любого одного из двух, ну или оба, вообще супер.document.querySelector('.popup__close.popup__area'); // без пробела
document.querySelector('.popup__close, .popup__area'); // через запятую
querySelector()
выбирает первый подходящий найденный элемент. Один.querySelectorAll()
выберет все подходящие. const months = 'января|февраля|марта';
const re = new RegExp(`(\\d{1,2})\\s(${months})\\s(\\d{4})`);
'блаблаблаб ла блаб ла 10 января 2023 блаблабла'.match(re)
// [ "10 января 2023", "10", "января", "2023" ]
Цель: изучить оба фреймворка и уметь с ними работать.
Mon Mar 20 2023 07:42:33 GMT+0300 (Moscow Standard Time)
(new Date(1679287353711))
.toISOString() // "2023-03-20T04:42:33.711Z"
.substring(11, 23) // "04:42:33.711"
;
Омонимы сидели в баре, развалившись, как баре.
\b
— работает только для ASCII, не годится для Unicode кириллицы./дум.?(?=$|\s)/u
– один опциональный символ, и смотреть вперёд, чтобы там был или конец строки или пробельный символ.const m = str => str.match(/дум.?(?=$|\s)/u);
m('ду') // null
m('дум') // ["дум"]
m('дума') // ["дума"]
m('думать') // null
Only functions defined as methods have access to thesuper
keyword.super.prop
looks up the property on the prototype of the object that the method was initialized on.
Свойство [[HomeObject]] определено для методов как классов, так и обычных объектов. Но для объектов методы должны быть объявлены именно как method(), а не "method: function()".
Для нас различий нет, но они есть для JavaScript.
<?php
use OpenSwoole\WebSocket\Server;
use OpenSwoole\Http\Request;
use OpenSwoole\WebSocket\Frame;
$server = new Server("0.0.0.0", 9502);
$server->on("Start", function(Server $server)
{
echo "OpenSwoole WebSocket Server is started at http://127.0.0.1:9502\n";
});
$server->on('Open', function(Server $server, OpenSwoole\Http\Request $request)
{
echo "connection open: {$request->fd}\n";
$server->tick(1000, function() use ($server, $request)
{
$server->push($request->fd, json_encode(["hello", time()]));
});
});
$server->on('Message', function(Server $server, Frame $frame)
{
echo "received message: {$frame->data}\n";
$server->push($frame->fd, json_encode(["hello", time()]));
});
$server->on('Close', function(Server $server, int $fd)
{
echo "connection close: {$fd}\n";
});
$server->on('Disconnect', function(Server $server, int $fd)
{
echo "connection disconnect: {$fd}\n";
});
$server->start();
cmd + F2
(на маке) выделит все включения текущего слова. Мульти-курсор, можно заменить или допечатать/удалить часть – везде и сразу ©cmd + shift + P
и начать печатать "Emmet: Balance (inward)" – и выбрать командуconst str = '1+1'; // строка
const result = eval(str); // 2
плохой кулхацкер передаст не "1+1", а злодейский код, который тупо выполнится и всё сломает.+ - * /
Разбить можно используя «регулярное выражение», или просто тупо искать в строке один из 4 операторов. С регуляркой примерно так: const str = '1+1'; // строка
const parts = str.match(/(\d+)([-+*\/])(\d+)/); // массив [ "1+1", "1", "+", "1" ]
if (!parts) throw 'не похоже на арифметику!';
const [ _, A, op, B ] = parts;
const a = +A; // из строки в число
const b = +B;
let result;
if (op === '+') result = a + b;
if (op === '-') result = a - b;
if (op === '*') result = a * b;
if (op === '/') result = a / b;
console.log('result', result); // 2