👁‍🗨 CODORUM — пишу на JavaScript
803 subscribers
146 photos
84 videos
230 links
🟣 Канал создан с целью совместного обучения программированию на языке JavaScript 🟨

✔️ Канал подойдёт для тех кто желает:
научиться программировать на языке JavaScript
расширить свой кругозор в знаниях функций на JS

🎥 Ютуб канал: youtube.com/@codorum
Download Telegram
Благодаря методу pop мы можем удалить последний элемент массива 🔫

Но если мы объявим новую переменную, которая будет равна применению метода pop к массиву с элементами мы можем получить противоположный по сути эффект. То есть последний элемент наоборот будет сохранен, а все остальные элементы будут удалены ↔️

Но, на самом деле, в то же время метод все таки будет применен для массива с элементами. То есть последний элемент все таки будет удален с массива, но одновременно он будет присвоен новой переменной 👁‍🗨

Код со скрина:
// ✦ Удаление последнего элемента массива
let array = ['green', 'blue', 'red'];

array.pop();
console.log("Массив array после применения метода pop:", array)


// ✦ Присвоение последнего элемента массива в переменную
let numbers = [1, 2, 3];

let deleted_num = numbers.pop();
console.log("numbers =", numbers)
console.log("deleted_num =", deleted_num)
🔥8
С помощью метода Object.assign мы можем продублировать свойства одного объекта в другой без необходимости объявления дополнительного объекта (для сложения двух объектов или применения Spread оператора для развертывания) 👯‍♀️

Метод применяется просто: первым значением в скобках выступает объект, в который мы хотим добавить свойства из второго объекта. Вторым значением выступает объект, свойства из которого мы хотим добавить *️⃣

В результате первый объект (в который мы копировали свойства с другого объекта) помимо своих свойств теперь будет иметь и свойства второго объекта. Второй же объект останется без изменений 👁‍🗨

Код со скрина:
const obj1 = { name: "Brandon", age: 26 };
const obj2 = { role: "distributor" }

Object.assign(obj1, obj2);


console.log(obj1);
👍7
This media is not supported in your browser
VIEW IN TELEGRAM
В этом видео я показал как сделать поле ввода для регистрации и авторизации как у Google 🔍

Ключевые моменты:
надпись поля ввода (labelline) меняет свое расположение, размер и цвет при нажатии на поле ввода
у неё есть белый фон, благодаря чему при наезде на границу/обводку поля ввода она перекрывает часть линии
сама обводка поля ввода меняет лишь толщину и цвет, а также высоту (height) и ширину (width) лишь на 2 пикселя, благодаря чему создается впечатление что обводка при нажатии на поле ввода "жирнеет" внутрь

Классы для анимации надписи поля ввода (больше кода не помещается в пост):
.labelline {
position: absolute;
font-size: 2em;
padding: 0 25px;
margin: 0 12px;
background-color: white;
transition: 0.2s ease;
}

input:focus,
input:valid {
border: 3px solid blue;
height: 78px;
width: 498px;
}

input:focus + .labelline,
input:valid + .labelline{
color: blue;
height: 30px;
line-height: 30px;
padding: 0 10px;
transform: translate(-15px, -16px) scale(0.83);
z-index: 1111;
}
🔥6👍31
В JavaScript есть метод Number, который конвертирует данные разного типа в числа 🔢

По примеру со скрина у нас были 2 переменные с boolean значениями: a ("true"), b ("false") 🚥

В следствии применения метода boolean значения переменных конвертировались в числовые значения: a ("1"), b ("0") 🔢

Казалось бы, применение метода на этом ограничивается, ведь если конвертировать строковое значение методом Number мы получим NaN, но методом Number мы также можем конвертировать данные связанные с датами в числа или даже объекты в числа 👁‍🗨

Код со скрина:
var a = true; 
console.log('значение переменной "a" до применения метода:', a)

var TrueToNum = Number(a);
console.log('значение переменной "a" после применения метода:', TrueToNum)


var b = false;
console.log('значение переменной "b" до применения метода:', b)

var FalseToNum = Number(b);
console.log('значение переменной "b" после применения метода:', FalseToNum)
👍4🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Регулярные выражения – это инструмент позволяющий находить, заменять и валидировать текстовые данные ⌨️

Они состоят из символов разных типов, используя которые определяется некий шаблон, по которому и можно найти, заменить или провалидировать данные 🗄

В видео мы рассмотрели как благодаря регулярному выражению можно реализовать функцию для проверки правильности ввода электронной почты 👁‍🗨

Код из видео:
function validateEmail(email) {
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
return emailRegex.test(email);
}

// Проверка данных:
const email1 = "example@example.com";
const email2 = "invalid-email";

console.log("Правильность ввода email1:", validateEmail(email1));
console.log("Правильность ввода email2:", validateEmail(email2));
👍5🔥1
Благодаря методу push можно добавить один или несколько элементов в конец массива ⤵️

Применение метода простое: нужно лишь указать массив с новой строки, через точку указать метод push и в скобках указать элемент или элементы, которые мы хотим добавить в массив ℹ️

По сути это единственное предназначение метода и, к сожалению, его нельзя использовать для добавления свойств в объект. Тем не менее метод необходимо знать для работы с массивами 👁‍🗨

Код со скрина:
let persons = ['Heisenberg', 'Pinkman', 'Gustavo'];

persons.push('Saul');

console.log("persons =", persons);



let numbers = [1, 2];

numbers.push(3, 4);

console.log("numbers =", numbers);
👍5
This media is not supported in your browser
VIEW IN TELEGRAM
Scope – это область видимости для переменных и функций 🔳

Есть три типа Scope: глобальный Scope, локальный (функциональный) и блочный ℹ️

Переменные объявленные на уровень выше будут видны также в скоупе на уровень ниже. То есть, например, переменная "a" с кода на гиф изображении выше будет доступна в локальном скоупе (области видимости функции Local), но переменная "b", которая объявлена внутри скоупа функции не будет видна на глобальном скоуп уровне 👁‍🗨

Границы скоуп уровней определяются фигурными скобками. И, обычно, в редакторах кода можно увидеть характерную вертикальную линию, которая подсказывает границы внутренних Scope уровней ☑️
🔥31👍1👎1
This media is not supported in your browser
VIEW IN TELEGRAM
С помощью свойства transform-style со значением preserve-3d и свойства transform со значениями rotateX и translateZ мы можем создать интересный 3д эффект переворачивания кнопки при hover наведении 📦

Нам потребуется стилизовать кнопку в виде коробки и две её стороны. В видео я детальнее показал как работают эти свойства в нашем случае 👁‍🗨

CSS стили из видео:
.block {
perspective: 800px;
display: flex;
justify-content: center;
}

.box {
--height: 50px;
height: var(--height);
width: 150px;
transform-style: preserve-3d;
transition: 1s ease;
}

.box:hover {
transform: rotateX(90deg);
}

.btn {
height: 100%;
width: 100%;
position: absolute;
background-color: #141117;
display: flex;
align-items: center;
justify-content: center;
color: white;
}

.upside {
background-color: #b685ff;
transform: rotateX(-90deg) translateZ(calc(var(--height)/2));
}

.front {
transform: translateZ(calc(var(--height)/2));
}
🔥51
This media is not supported in your browser
VIEW IN TELEGRAM
reverse – метод, позволяющий поменять порядок элементов в массиве 🔁

Это метод массива и с его помощью нельзя поменять порядок свойств в объекте, но мы можем поменять порядок ключей свойств объекта 🔑

То есть с помощью дополнительного метода Object.keys получаем массив ключей свойств объекта, меняем их порядок методом reverse и объявляем новый объект, добавляя в него те же свойства и ключи, но уже в другом порядке 👁‍🗨

Код из видео:
let array = [1, 2, 3];
array.reverse();
console.log(array);


let object = { name: "Codorum", language: "JS" }
let keys = Object.keys(object);
keys.reverse();

let NewObject = {};
keys.forEach(key => {
NewObject[key] = object[key];
});

console.log(NewObject)
🔥4
Зачем нужны классы в JavaScript? Классы – это способ определения объектов, их свойств и методов. Благодаря классам можно создавать объекты определенного стандарта ✴️

На примере кода со скрина есть класс programmer с конструктором, в котором есть свойство name и метод write 🧑‍💻

Ниже был создан новый объект Codorum, которому был присвоен класс programmer. Теперь мы можем вызвать метод write класса programmer от имени объекта Codorum 👁‍🗨

Код со скрина:
class programmer {
constructor(name) { // конструктор класса
this.name = name; // свойства класса
}

write() { // метод класса
console.log(`${this.name} пишет код`);
}
}

const Codorum = new programmer('Codorum');

Codorum.write(); // запуск метода объектом
🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
Как реализовать анимацию загрузки контента на странице в виде движения линии по блоку с помощью CSS? 🟦

Для этого нужно определить блок в котором будет происходить анимация и прописать для него псевдокласс :before, в котором стилизовать линию 📏

Последнее что понадобится создать анимацию в @keyframes ▶️

Код из видео:
// index.js

<div class="block">
<div class="ava"/>
<div style={{ display: "block" }}>
<div class="name"/>
<div class="description"/>
</div>
</div>


/* index.css */

.block {
display: flex;
justify-content: center;
align-items: center;
}

.block:before {
content: '';
position: absolute;
height: 300px;
width: 40px;
background: #ffffffdd;
filter: blur(4px);
transform: rotate(-20deg) translateX(-200px);
animation: line 1s linear infinite;
}

@keyframes line {
25% {
transform: rotate(-20deg) translateX(300px); ;
}
100% {
transform: rotate(-20deg) translateX(300px); ;
}
}
🔥6
Что такое наследование классов в JavaScript? 👯‍♀️

Наследование классов – это когда новый класс наследует свойства и методы с другого класса 🤝

Например, класс Programmer наследует класс Writer на примере со скрина 🎆

Это означает что теперь в классе Programmer есть такой же конструктор и методы как в классе Writer 👏

Соответственно теперь мы можем присвоить новый класс Programmer объекту и использовать метод, аналогичный методу класса Writer 👁‍🗨

Код со скрина:
class Writer {
constructor(name) {
this.name = name;
}

think() {
console.log(`${this.name} думает`);
}
}

// класс Programmer наследует свойства и методы класса Writer
class Programmer extends Writer {}

const Codorum = new Programmer('Codorum');

Codorum.think();
👍7
This media is not supported in your browser
VIEW IN TELEGRAM
Мутабельность (от лат. mutabilis – изменяемый) и иммутабельность (от лат. immutabilis – неизменяемый) – два ключевых понятия в программировании, которые описывают возможность изменения данных после их создания ✏️

Мутабельные данные можно изменять после создания. Это означает, что вы можете менять значения, добавлять или удалять элементы, модифицировать структуру данных. Пример мутабельных типов данных: массивы и объекты 🔓

Иммутабельные данные, напротив, не могут быть изменены после создания. Любое изменение таких данных приводит к созданию новой копии с изменениями, оставляя оригинал нетронутым. Пример иммутабельных типов данных: числа, строки, булевые значения 🔒
👍4🔥2
С помощью метода slice можно вырезать часть элементов из массива или часть текста со строки 🔪

Для применения метода необходимо объявить новую переменную, через знак равно указать массив или строку, метод и в скобках промежуток элементов или символов, которые нужно вырезать 🔠

Метод вырежет промежуток учитывая элемент, индекс которого был указан первым в скобках, но не учитывая элемент, индекс которого был указан вторым в скобках ℹ️

Переменная будет равна тем элементам или символам, которые мы в последствии вырезали 👁‍🗨
👍2🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Делюсь интересной анимацией смены и выделения текста, которая добавит немного динамичности на ваш сайт 🖌

Для её реализации нужно добавить два заголовка в div контейнер, в одном из которых прописать варианты текста в span элементы, которые будут меняться и выделяться 🔄

В @keyframes нужно будет создать две анимации: для смены текста, для выделения текста ❇️

Детальнее про реализацию анимации рассказал в видео 👁‍🗨

CSS стили из видео:
h2 span {
position: relative;
animation: displayText 9s infinite;
}

@keyframes displayText {
0% { display: inline-block }
33.33%, 100% { display: none }
}

h2 span:before {
content: attr(data-text);
position: absolute;
color: #878bf8;
border-right: 1px solid #878bf8;
animation: printing 3s linear infinite;
overflow: hidden;
background-color: #878bf840;
}

@keyframes printing {
0%, 10%, 100% { width: 0 }
70%, 90% { width: 100% }
}
❤‍🔥2🔥2
Рассмотрим тип объекта Object в JavaScript ⚜️

Объекты с типом Object используется для хранения свойств, методов и других вложенных объектов 🗄

На примере кода со скрина есть объект типа Object под названием person 👤

👉 У объекта person есть:
свойства name и age
вложенный объект address
метод speak, который выводит текст в консоль

👉 Что можно делать с объектом person:
обращаться к свойствам (используя название объекта и название свойства "person.name")
вызывать методы (используя название объекта и название метода "person.speak()")

Код со скрина:
let person = {
name: 'Jesse',
age: 24,
address: {
city: 'Albuquerque',
state: 'New Mexico'
},

speak: function() {
console.log(`${this.name} said: What's up, b*tch?`);
}
};

console.log(person.name)
person.speak()
👍3🔥1😴1
This media is not supported in your browser
VIEW IN TELEGRAM
render – это единственный обязательный метод жизненного цикла в классовых компонентах React ⚛️

Каждый раз, когда состояние или пропсы компонента изменяются, метод render вызывается снова для обновления интерфейса 🔄

👉 Что можно использовать и возвращать в render:
использовать условные операторы для отображения разного контента в зависимости от состояния или пропсов
возвращать JSX, описывающий структуру UI
возвращать массивы или React.Fragment, чтобы отобразить несколько элементов
👍3
Ранее делал пост про метод pop, благодаря которому можно удалить последний элемент массива 🔫

Есть аналогичный методу popметод shift но удаляющий первый элемент массива ℹ️

Точно так же как и в случае с методом pop если мы объявим новую переменную, которая будет равна применению метода shift к массиву с элементами мы можем присвоить удаленный элемент этой новой переменной 💾

В то же время метод будет применен для массива с элементами. То есть первый элемент будет удален с массива, но одновременно он будет присвоен новой переменной 👁‍🗨

Код со скрина:
// ✦ Удаление первого элемента массива
let array = ['green', 'blue', 'red'];

array.shift();
console.log("Массив array после применения метода shift:", array)


// ✦ Присвоение первого элемента массива в переменную
let numbers = [1, 2, 3];

let deleted_num = numbers.shift();
console.log("numbers =", numbers)
console.log("deleted_num =", deleted_num)
👍2🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Как, при необходимости, проигнорировать отступы заданные в глобальном классе body чтобы полноценно стилизовать новый контейнер? 🟦

Мы можем поступить следующим образом: задать аналогичные margin отступы в классе нового контейнера, но со знаком минус, благодаря чему мы компенсируем отступы. Затем стилизовать контейнер и заново добавить отступы, но уже через свойство padding

В видео я показал как стилизовал новый блок html страницы проигнорировав margin отступы заданные в глобальном классе страницы body 👁‍🗨

Код из видео:
body {
margin-left: 75px;
margin-right: 75px;
}

.service-block {
margin-left: -75px;
margin-right: -75px;
background: #4824ff;
padding: 0 75px;
}
👍3🔥2
Одно из важных отличий var от let в JavaScript – это область видимости Scope 🧿

Переменные, объявленные с помощью var видны не только на уровне блочного скоупа, а и на уровне локального или же функционального скоупа, вне зависимости от места где они были объявлены. А переменные, объявленные с помощью let видны только внутри блока кода, где были объявлены 🔦

На скрине есть функция с блоком if. Соответственно мы имеем 2 скоуп уровня: локальный скоуп функции и блочный скоуп блока if. Внутри блока if объявлены 2 переменные: одна через var, другая через let ℹ️

Запустив функцию переменная var будет выведена в консоль, значит она видна на уровне всего локального скоупа, а переменная let не будет определена ❗️

Но на практике уже мало кто использует var для объявления переменных в JavaScript 👁‍🗨
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Cross-Origin Resource Sharing (CORS) — это механизм безопасности, позволяющий веб-странице из одного домена запрашивать ресурсы, размещенные на другом домене. CORS позволяет веб-приложениям безопасно взаимодействовать с ресурсами в других доменах, если сервер настроен соответствующим образом 🛡

В стандартной настройке браузер блокирует такие запросы с помощью политики одного источника (same-origin policy), чтобы предотвратить атаки типа XSS (cross-site scripting). CORS позволяет обойти эти ограничения, если сервер, к которому следует запрос, позволяет это 🔐

Основные понятия и механизмы CORS включают: HTTP-заголовки и Preflight-запрос 👁‍🗨
👍3