Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy
Контакт для рекламы: @sendme_ads
Post #439
6.22K
- 😁 10
- 🔥 7
- ❤ 2
- 🎉 1
FR @easy_javascript_ru
Showing posts older than #442 · Back to latest
fetch или axios.fetch:function fetchData() {
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => {
console.log(data);
})
.catch(error => {
console.error('Error:', error);
});
}import React, { useEffect, useState } from 'react';
function MyComponent() {
const [data, setData] = useState(null);
useEffect(() => {
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => setData(data))
.catch(error => console.error('Error:', error));
}, []);
return (
<div>
{data ? <div>Data: {data}</div> : <div>Loading...</div>}
</div>
);
}import React, { useEffect, useState } from 'react';
import { View, Text } from 'react-native';
function MyComponent() {
const [data, setData] = useState(null);
useEffect(() => {
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => setData(data))
.catch(error => console.error('Error:', error));
}, []);
return (
<View>
{data ? <Text>Data: {data}</Text> : <Text>Loading...</Text>}
</View>
);
}axios:const axios = require('axios');
axios.get('https://api.example.com/data')
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error('Error:', error);
});import requests
from django.http import JsonResponse
def fetch_data(request):
response = requests.get('https://api.example.com/data')
if response.status_code == 200:
return JsonResponse(response.json())
else:
return JsonResponse({'error': 'Failed to fetch data'}, status=response.status_code)
GET /search?query=javascript&page=2 HTTP/1.1
Host: www.example.com
GET могут быть закешированы браузером и прокси-серверами, что повышает производительность при повторных запросах.GET могут быть сохранены в закладках (букмарклеты) и легко шарятся.GET должны быть идемпотентными, то есть выполнение одного и того же запроса несколько раз не должно изменять состояние сервера.POST /submit-form HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
username=john&password=1234
POST, не видны в URL, что делает этот метод более безопасным для передачи чувствительных данных (например, паролей). Однако данные все равно могут быть перехвачены, если не используется HTTPS.POST не кешируются браузером по умолчанию.POST не имеет таких же строгих ограничений по длине данных, как GET, что делает его подходящим для отправки больших объемов данных.POST могут изменять состояние сервера, и выполнение одного и того же запроса несколько раз может привести к разным результатам (например, повторная отправка формы может создать дубликаты данных).<form action="/search" method="get">
<input type="text" name="query" />
<button type="submit">Search</button>
</form>
<form action="/submit-form" method="post">
<input type="text" name="username" />
<input type="password" name="password" />
<button type="submit">Submit</button>
</form>
GET используется для получения данных и передает параметры в URL, может кешироваться и имеет ограничение по длине URL. POST используется для отправки данных, передает параметры в теле запроса, не кешируется и не имеет строгих ограничений по длине данных.function syncTask() {
console.log('Начало');
for (let i = 0; i < 1000000000; i++) { /* Длительная операция */}
console.log('Конец');
}
syncTask();
console.log('Это будет выполнено после syncTask');console.log не будет вызван.async/await для обработки результата по завершении.console.log('Начало');
setTimeout(() => {
console.log('Асинхронная операция');
}, 1000);
console.log('Конец');setTimeout ставит задачу на выполнение через 1 секунду, но код продолжает выполняться дальше, и console.log('Конец') вызывается до завершения асинхронной операции.console.log('Начало');
new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Асинхронная операция завершена');
}, 1000);
}).then(message => {
console.log(message);
});
console.log('Конец');async/await:console.log('Начало');
async function asyncTask() {
await new Promise(resolve => setTimeout(resolve, 1000));
console.log('Асинхронная операция завершена');
}
asyncTask();
console.log('Конец');.container {
text-align: center;
} margin: auto для блочных элементов с фиксированной шириной.element {
width: 50%;
margin: 0 auto;
}.container {
display: flex;
justify-content: center; /* Центрирование по горизонтали */
align-items: center; /* Центрирование по вертикали */
height: 100vh; /* Высота контейнера */
}.container {
display: grid;
place-items: center; /* Центрирование по горизонтали и вертикали */
height: 100vh; /* Высота контейнера */
}<div class="container">
<div>Центрированный элемент</div>
</div>
.container {
display: flex;
justify-content: center; /* Центрирование по горизонтали */
align-items: center; /* Центрирование по вертикали */
height: 100vh; /* Высота контейнера */
}<div class="container">
<div>Центрированный элемент</div>
</div>
place-items..container {
display: grid;
place-items: center; /* Центрирование по горизонтали и вертикали */
height: 100vh; /* Высота контейнера */
}<div class="container">
<div>Центрированный элемент</div>
</div>
.container {
position: relative;
height: 100vh; /* Высота контейнера */
}
.element {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%); /* Центрирование с учетом размеров элемента */
}<div class="container">
<div class="element">Центрированный элемент</div>
</div>
text-align для строчных элементов, margin: auto для блочных элементов, Flexbox и Grid для универсального центрирования, а также абсолютного позиционирования с трансформацией.style, то каждый элемент должен иметь свои стили, что ведет к дублированию кода..button {
background-color: blue;
color: white;
padding: 10px;
border-radius: 5px;
}style для каждого элемента. Это особенно важно для больших проектов./* CSS файл */
.text-red {
color: red;
}
<p class="text-red">This text is red.</p>
<p class="text-red">This text is also red.</p>
/* CSS файл */
@media (max-width: 600px) {
.container {
flex-direction: column;
}
}
<p style="color: red; font-size: 16px;">This is a paragraph.</p>
<p style="color: red; font-size: 16px;">This is another paragraph.</p>
/* CSS файл */
.red-text {
color: red;
font-size: 16px;
}
<p class="red-text">This is a paragraph.</p>
<p class="red-text">This is another paragraph.</p>
style, потому что это делает код сложным для чтения, поддержания и повторного использования. Вместо этого мы используем CSS-файлы для разделения структуры и стилизации, что упрощает работу с кодом и повышает производительность.document, который представляет весь HTML-документ. Узлы могут быть элементами (<div>, <p>, <a> и т.д.), текстом, комментариями и другими типами.<!DOCTYPE html>
<html>
<head>
<title>Document Object Model</title>
</head>
<body>
<h1>Hello, world!</h1>
<p>This is a paragraph.</p>
</body>
</html>
document
└── html
├── head
│ └── title
│ └── "Document Object Model"
└── body
├── h1
│ └── "Hello, world!"
└── p
└── "This is a paragraph."
document.getElementById(id): Возвращает элемент по его id.document.getElementsByClassName(className): Возвращает все элементы с указанным классом.document.getElementsByTagName(tagName): Возвращает все элементы с указанным тегом.document.querySelector(selector): Возвращает первый элемент, соответствующий CSS селектору.document.querySelectorAll(selector): Возвращает все элементы, соответствующие CSS селектору.document.createElement(tagName): Создает новый элемент.parentElement.appendChild(childElement): Добавляет элемент в конец дочерних элементов родителя.parentElement.removeChild(childElement): Удаляет элемент из дочерних элементов родителя.element.innerHTML: Изменяет или получает HTML-содержимое элемента.element.textContent: Изменяет или получает текстовое содержимое элемента.element.setAttribute(name, value): Устанавливает значение атрибута элемента.element.getAttribute(name): Получает значение атрибута элемента.// Изменение текста заголовка
const header = document.querySelector('h1');
header.textContent = 'Hello, DOM!';
// Добавление нового параграфа
const newParagraph = document.createElement('p');
newParagraph.textContent = 'This is a new paragraph.';
document.body.appendChild(newParagraph);
// Изменение атрибута
const link = document.querySelector('a');
link.setAttribute('href', 'https://www.example.com');
function greet(name) {
return `Hello, ${name}!`;
}
console.log(greet('Alice')); // Hello, Alice!function, за которым следуют имя функции, список параметров в круглых скобках и тело функции в фигурных скобках.const greet = function(name) {
returnни нужны
};
console.log(greet('Bob')); // Hello, Bob!
const greet = (name) => {
return Hello, ${name}!;
};
console.log(greet('Carol')); // Hello, Carol!
this.function add(a, b) {
return a + b;
}
console.log(add(2, 3)); // 5return. Если return отсутствует, функция возвращает undefined.function multiply(a, b) {
return a * b;
}
console.log(multiply(4, 5)); // 20function scopeExample() {
let localVar = 'I am local';
console.log(localVar); // I am local
}
scopeExample();
console.log(localVar); // ReferenceError: localVar is not definedfunction outerFunction() {
let outerVar = 'I am outside!';
function innerFunction() {
console.log(outerVar);
}
return innerFunction;
}
const inner = outerFunction();
inner(); // I am outside!var, let и const. Они имеют разные особенности и используются в разных ситуациях.var имеет функциональную область видимости, то есть она видна внутри функции, где была объявлена, или в глобальной области, если объявлена вне функций.var поднимаются вверх своей области видимости, но присвоение значения происходит в том месте, где оно записано. Это значит, что переменную можно использовать до ее объявления.var, могут быть переобъявлены в пределах одной и той же области видимости.function exampleVar() {
console.log(x); // undefined
var x = 10;
console.log(x); // 10
}
exampleVar();var:let имеет блочную область видимости, то есть виден только внутри блока {}, в котором объявлен.let поднимаются, доступ к ним возможен только после строки, где они объявлены (временная мертвая зона).let, в той же области видимости.function exampleLet() {
console.log(y); // ReferenceError: y is not defined
let y = 10;
console.log(y); // 10
}
exampleLet();let, имеет блочную область видимости.let в плане поднятия и временной мертвой зоны.const, должна быть инициализирована при объявлении и её значение нельзя изменить после этого. Однако, если const используется для объявления объекта или массива, можно изменять их содержимое.function exampleConst() {
const z = 10;
console.log(z); // 10
z = 20; // TypeError: Assignment to constant variable.
}
exampleConst();
function exampleConstObject() {
const obj = { key: 'value' };
obj.key = 'new value'; // Изменение допустимо
console.log(obj.key); // 'new value'
}
exampleConstObject();let и const обеспечивают лучшую управляемость кода.== или ===), сравниваются их ссылки, а не содержимое.const obj1 = { a: 1 };
const obj2 = { a: 1 };
const obj3 = obj1;
console.log(obj1 === obj2); // false
console.log(obj1 === obj3); // truefunction deepEqual(obj1, obj2) {
if (obj1 === obj2) {
return true;
}
if (obj1 == null || typeof obj1 !== 'object' ||
obj2 == null || typeof obj2 !== 'object') {
return false;
}
const keys1 = Object.keys(obj1);
const keys2 = Object.keys(obj2);
if (keys1.length !== keys2.length) {
return false;
}
for (let key of keys1) {
if (!keys2.includes(key) || !deepEqual(obj1[key], obj2[key])) {
return false;
}
}
return true;
}
const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { a: 1, b: { c: 2 } };
const obj3 = { a: 1, b: { c: 3 } };
console.log(deepEqual(obj1, obj2)); // true
console.log(deepEqual(obj1, obj3)); // falselodash или deep-equal.const _ = require('lodash');
const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { a: 1, b: { c: 2 } };
const obj3 = { a: 1, b: { c: 3 } };
console.log(_.isEqual(obj1, obj2)); // true
console.log(_.isEqual(obj1, obj3)); // falseJSON.stringify, однако этот метод имеет ограничения и может не работать с более сложными структурами (например, с функциями, undefined, или символами).const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { a: 1, b: { c: 2 } };
const obj3 = { a: 1, b: { c: 3 } };
console.log(JSON.stringify(obj1) === JSON.stringify(obj2)); // true
console.log(JSON.stringify(obj1) === JSON.stringify(obj3)); // false===, если нужно проверить, указывают ли переменные на один и тот же объект.lodash), чтобы проверить равенство содержимого объектов.<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Image Size Example</title>
<style>
img {
display: block;
max-width: 100%;
height: auto;
}
</style>
</head>
<body>
<h1>Example Image</h1>
<img src="image.jpg" width="600" height="400" alt="Example Image">
</body>
</html>
width и height задают фиксированные размеры для изображения. Это позволяет браузеру зарезервировать нужное пространство до загрузки изображения.max-width: 100%; height: auto; гарантирует, что изображение будет масштабироваться в зависимости от ширины контейнера, сохраняя пропорции.this. Контекст функции определяется способом ее вызова, а не тем, где функция была определена. Вот основные способы, которыми определяется контекст функции:this ссылается на глобальный объект. В браузере это объект window.console.log(this); // В браузере это будет window
this ссылается на глобальный объект (в строгом режиме — undefined). function showThis() {
console.log(this);
}
showThis(); // В браузере это будет window (или undefined в строгом режиме)
this ссылается на объект, которому принадлежит метод.const obj = {
name: 'Alice',
showThis: function() {
console.log(this);
}
};
obj.showThis(); // { name: 'Alice', showThis: [Function: showThis] }new, this ссылается на новый созданный объект.function Person(name) {
this.name = name;
}
const alice = new Person('Alice');
console.log(alice.name); // Alicethis при вызове функции.call: вызывает функцию с указанным значением this и аргументами, переданными по отдельности. function showThis() {
console.log(this);
}
const obj = { name: 'Alice' };
showThis.call(obj); // { name: 'Alice' }
apply: вызывает функцию с указанным значением this и аргументами, переданными в виде массива.showThis.apply(obj); // { name: 'Alice' }bind: возвращает новую функцию, которая при вызове будет иметь указанный контекст this.const boundShowThis = showThis.bind(obj);
boundShowThis(); // { name: 'Alice' }
const obj = {
name: 'Alice',
showThis: function() {
const arrowFunc = () => console.log(this);
arrowFunc();
}
};
obj.showThis(); // { name: 'Alice' }const button = document.querySelector('button');
button.addEventListener('click', function() {
console.log(this); // <button> элемент
});git initgit clone <url>git add <file>git commit -m "Сообщение коммита"git branch <branch-name>
✅Переключение на другую ветку: git checkout <branch-name>git checkout -b <branch-name>git merge <branch-name>git remote add origin <url>
✅Отправка изменений в удаленный репозиторий: git push origin <branch-name>git pull origin <branch-name>mkdir my-project
cd my-project
git init
echo "# My Project" > README.md
git add README.md
git commit -m "Initial commit"
git remote add origin https://github.com/username/my-project.git
git push -u origin master
git checkout -b new-feature
echo "New feature" > feature.txt
git add feature.txt
git commit -m "Add new feature"
git push origin new-feature
function, идущего перед именем функции. Эти функции "всплывают" (hoisted), что означает, что они могут быть вызваны до их определения в коде.function greet(name) {
return `Hello, ${name}!`;
}
console.log(greet('Alice')); // Hello, Alice!
Функциональные выражения (Function Expression)
Не "всплывают" и не могут быть вызваны до их определения.
const greet = function(name) {
returned
};
console.log(greet('Bob')); // Hello, Bob!const greet = (name) => Hello, ${name}!;
console.log(greet('Charlie')); // Hello, Charlie!setTimeout(function() {
console.log('This will run after 1 second');
}, 1000);function Person(name, age) {
this.name = name;
this.age = age;
}
const alice = new Person('Alice', 30);
console.log(alice.name); // Alice
5️⃣Методы объектаconst person = {
name: 'Alice',
greet: function() {
return Hello, my name is ${this.name};
}
};
console.log(person.greet()); // Hello, my name is Alice
function* generatorFunction() {
yield 'First';
yield 'Second';
yield 'Third';
}
const gen = generatorFunction();
console.log(gen.next().value); // First
console.log(gen.next().value); // Second
console.log(gen.next().value); // Thirdasync function fetchData() {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
return data;
}
fetchData().then(data => console.log(data));function fetchData(callback) {
setTimeout(() => {
const data = { name: 'Alice' };
callback(data);
}, 1000);
}
fetchData(function(data) {
console.log(data); // { name: 'Alice' }
});
!important (приоритет выше всех обычных правил).<link>), встроенными (внутри элемента <style> в самом HTML-документе) или инлайновыми (непосредственно в атрибутах стиля HTML-элементов).<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSS Example</title>
<link rel="stylesheet" href="styles.css">
<style>
.inline-style {
color: red;
}
</style>
</head>
<body>
<h1 class="heading inline-style">Hello, World!</h1>
<p>This is a paragraph.</p>
</body>
</html>
styles.css задает стили для body, h1 и элементов с классом .heading.<style> задают цвет текста для элементов с классом .inline-style.<h1> будет красным, так как инлайновые стили имеют наибольший приоритет.