🧾 Методы строк в JavaScript (часть 16)
Метод trim():
Метод trim() удаляет пробельные символы с обеих сторон строки:
Пример:
var str = " Привет, мир! ";
alert(str.trim());
Этот trim() метод не поддерживается в Internet Explorer 8 и ниже.
Если вам нужна поддержка IE 8, вы можете использовать replace() вместо этого регулярное выражение:
Пример:
var str = " Привет, мир! ";
alert(str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''));
Вы также можете использовать решение замены выше, чтобы добавить функцию обрезки в JavaScript String.prototype:
Пример:
if (!String.prototype.trim) {
String.prototype.trim = function () {
return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
};
}
var str = " Привет, мир! ";
alert(str.trim());
📋 #JavaScript #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Метод trim():
Метод trim() удаляет пробельные символы с обеих сторон строки:
Пример:
var str = " Привет, мир! ";
alert(str.trim());
Этот trim() метод не поддерживается в Internet Explorer 8 и ниже.
Если вам нужна поддержка IE 8, вы можете использовать replace() вместо этого регулярное выражение:
Пример:
var str = " Привет, мир! ";
alert(str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''));
Вы также можете использовать решение замены выше, чтобы добавить функцию обрезки в JavaScript String.prototype:
Пример:
if (!String.prototype.trim) {
String.prototype.trim = function () {
return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
};
}
var str = " Привет, мир! ";
alert(str.trim());
📋 #JavaScript #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾 Как найти подстроку в строке в JavaScript?
Метод charAt возвращает символ по указанному индексу.
Метод includes проверяет, содержит ли строка переданную подстроку. Возвращается true либо false. Вторым параметром возможно передать индекс в строке, с которого надо начать поиск, но это необязательно.
Метод search проверяет, присутствует ли в строке переданное значение либо регулярное выражение и возвращает индекс начала совпадения. В случае, если переданное значение не найдено, возвращается -1.
📋 #JavaScript #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Метод charAt возвращает символ по указанному индексу.
Метод includes проверяет, содержит ли строка переданную подстроку. Возвращается true либо false. Вторым параметром возможно передать индекс в строке, с которого надо начать поиск, но это необязательно.
Метод search проверяет, присутствует ли в строке переданное значение либо регулярное выражение и возвращает индекс начала совпадения. В случае, если переданное значение не найдено, возвращается -1.
📋 #JavaScript #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾 Замыкание в JavaScript (Часть 1)
JavaScript – язык с сильным функционально-ориентированным уклоном. Он даёт нам много свободы. Функция может быть динамически создана, скопирована в другую переменную или передана как аргумент другой функции и позже вызвана из совершенно другого места.
Мы знаем, что функция может получить доступ к переменным из внешнего окружения, эта возможность используется очень часто. Что произойдет, когда переменные изменятся? Ответим на эти и другие вопросы.
Для начала давайте рассмотрим две ситуации, а затем изучим внутренние механизмы шаг за шагом, чтобы вы смогли ответить на эти и более сложные вопросы в будущем.
1. Функция sayHi использует внешнюю переменную name. Какое значение будет использовать функция при выполнении?
let name = "John";
function sayHi() {
alert("Hi, " + name);
}
name = "Pete";
sayHi(); // что будет показано: "John" или "Pete"?
Такие ситуации распространены и в браузерной и в серверной разработке. Выполнение функции может быть запланировано позже, чем она была создана, например, после какого-нибудь пользовательского действия или сетевого запроса.
📋 #JavaScript #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
JavaScript – язык с сильным функционально-ориентированным уклоном. Он даёт нам много свободы. Функция может быть динамически создана, скопирована в другую переменную или передана как аргумент другой функции и позже вызвана из совершенно другого места.
Мы знаем, что функция может получить доступ к переменным из внешнего окружения, эта возможность используется очень часто. Что произойдет, когда переменные изменятся? Ответим на эти и другие вопросы.
Для начала давайте рассмотрим две ситуации, а затем изучим внутренние механизмы шаг за шагом, чтобы вы смогли ответить на эти и более сложные вопросы в будущем.
1. Функция sayHi использует внешнюю переменную name. Какое значение будет использовать функция при выполнении?
let name = "John";
function sayHi() {
alert("Hi, " + name);
}
name = "Pete";
sayHi(); // что будет показано: "John" или "Pete"?
Такие ситуации распространены и в браузерной и в серверной разработке. Выполнение функции может быть запланировано позже, чем она была создана, например, после какого-нибудь пользовательского действия или сетевого запроса.
📋 #JavaScript #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Замыкание в JavaScript (Часть 2)
Итак, вопрос в том, получит ли она доступ к последним изменениям?
2. Функция makeWorker создаёт другую функцию и возвращает её. Новая функция может быть вызвана откуда-то ещё. Получит ли она доступ к внешним переменным из места своего создания или места выполнения или из обоих?
let name = "Pete";
return function() {
alert(name);
};
}
let name = "John";
// create a function
let work = makeWorker();
// call it
work(); // что будет показано? "Pete" (из места создания) или "John" (из места выполнения)
📋 #JavaScript #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Итак, вопрос в том, получит ли она доступ к последним изменениям?
2. Функция makeWorker создаёт другую функцию и возвращает её. Новая функция может быть вызвана откуда-то ещё. Получит ли она доступ к внешним переменным из места своего создания или места выполнения или из обоих?
function makeWorker() {let name = "Pete";
return function() {
alert(name);
};
}
let name = "John";
// create a function
let work = makeWorker();
// call it
work(); // что будет показано? "Pete" (из места создания) или "John" (из места выполнения)
📋 #JavaScript #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾 Замыкание в JavaScript (Часть 3)
Чтобы понять, что происходит, давайте для начала обсудим, что такое «переменная» на самом деле.
В JavaScript у каждой выполняемой функции, блока кода и скрипта есть связанный с ними внутренний (скрытый) объект, называемый лексическим окружением
LexicalEnvironment.
Объект лексического окружения состоит из двух частей:
1. Environment Record – объект, в котором как свойства хранятся все локальные переменные (а также некоторая другая информация, такая как значение this).
2. Ссылка на внешнее лексическое окружение – то есть то, которое соответствует коду снаружи (снаружи от текущих фигурных скобок).
"Переменная" – это просто
свойство специального внутреннего объекта: Environment Record. «Получить или изменить переменную», означает, «получить или изменить свойство этого объекта».
Например, в этом простом коде только одно лексическое окружение: схема.
📋 #JavaScript #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Чтобы понять, что происходит, давайте для начала обсудим, что такое «переменная» на самом деле.
В JavaScript у каждой выполняемой функции, блока кода и скрипта есть связанный с ними внутренний (скрытый) объект, называемый лексическим окружением
LexicalEnvironment.
Объект лексического окружения состоит из двух частей:
1. Environment Record – объект, в котором как свойства хранятся все локальные переменные (а также некоторая другая информация, такая как значение this).
2. Ссылка на внешнее лексическое окружение – то есть то, которое соответствует коду снаружи (снаружи от текущих фигурных скобок).
"Переменная" – это просто
свойство специального внутреннего объекта: Environment Record. «Получить или изменить переменную», означает, «получить или изменить свойство этого объекта».
Например, в этом простом коде только одно лексическое окружение: схема.
📋 #JavaScript #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾 Замыкание в JavaScript (Часть 4)
Это, так называемое, глобальное лексическое окружение, связанное со всем скриптом.
На картинке выше прямоугольник означает Environment Record (хранилище переменных), а стрелка означает ссылку на внешнее окружение. У глобального лексического окружения нет внешнего окружения, так что она указывает на null.
А вот как оно изменяется при объявлении и присваивании переменной: схема.
Прямоугольники с правой стороны демонстрируют, как глобальное лексическое окружение изменяется в процессе выполнения кода:
1. В начале скрипта лексическое окружение пустое.
2. Появляется определение переменной let
3. Переменной phrase присваивается значение.
4. Переменная phrase меняет значение.
Пока что всё выглядит просто, правда?
Итого:
- Переменная – это свойство специального внутреннего объекта, связанного с текущим выполняющимся блоком/функцией/скриптом.
- Работа с переменными – это на самом деле работа со свойствами этого объекта.
📋 #JavaScript #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Это, так называемое, глобальное лексическое окружение, связанное со всем скриптом.
На картинке выше прямоугольник означает Environment Record (хранилище переменных), а стрелка означает ссылку на внешнее окружение. У глобального лексического окружения нет внешнего окружения, так что она указывает на null.
А вот как оно изменяется при объявлении и присваивании переменной: схема.
Прямоугольники с правой стороны демонстрируют, как глобальное лексическое окружение изменяется в процессе выполнения кода:
1. В начале скрипта лексическое окружение пустое.
2. Появляется определение переменной let
phrase. У неё нет присвоенного значения, поэтому присваивается undefined.3. Переменной phrase присваивается значение.
4. Переменная phrase меняет значение.
Пока что всё выглядит просто, правда?
Итого:
- Переменная – это свойство специального внутреннего объекта, связанного с текущим выполняющимся блоком/функцией/скриптом.
- Работа с переменными – это на самом деле работа со свойствами этого объекта.
📋 #JavaScript #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾 Замыкание в JavaScript (Часть 5)
До сих пор мы рассматривали только переменные. Теперь рассмотрим Function Declaration.
В отличие от переменных, объявленных с помощью let, они полностью инициализируются не тогда, когда выполнение доходит до них, а раньше, когда создаётся лексическое окружение.
Для верхнеуровневых функций это означает момент, когда скрипт начинает выполнение.
Вот почему мы можем вызвать функцию, объявленную через Function Declaration, до того, как она определена.
Следующий код демонстрирует, что уже с самого начала в лексическом окружении что-то есть. Там есть say, потому что это Function Declaration. И позже там появится phrase, объявленное через let: схема.
📋 #JavaScript #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
До сих пор мы рассматривали только переменные. Теперь рассмотрим Function Declaration.
В отличие от переменных, объявленных с помощью let, они полностью инициализируются не тогда, когда выполнение доходит до них, а раньше, когда создаётся лексическое окружение.
Для верхнеуровневых функций это означает момент, когда скрипт начинает выполнение.
Вот почему мы можем вызвать функцию, объявленную через Function Declaration, до того, как она определена.
Следующий код демонстрирует, что уже с самого начала в лексическом окружении что-то есть. Там есть say, потому что это Function Declaration. И позже там появится phrase, объявленное через let: схема.
📋 #JavaScript #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾Как передаются аргументы – значения или ссылка?
В Python аргументы передаются по ссылке, т. е. передается ссылка на реальный объект. Но есть два вида передачи объекта в аргументах.
По значению: Передается копия реального объекта. Изменение значения копии объекта не приведет к изменению значения исходного объекта.
По ссылке: Передается ссылка на реальный объект. Изменение значения нового объекта изменит значение исходного объекта.
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
В Python аргументы передаются по ссылке, т. е. передается ссылка на реальный объект. Но есть два вида передачи объекта в аргументах.
По значению: Передается копия реального объекта. Изменение значения копии объекта не приведет к изменению значения исходного объекта.
По ссылке: Передается ссылка на реальный объект. Изменение значения нового объекта изменит значение исходного объекта.
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾Как управляется память в Python?
В Python оператор присваивания (=) не копирует объекты. Вместо этого он создает связь между существующим объектом и именем целевой переменной. Чтобы создать копии объекта в Python, необходимо использовать модуль copy. Более того, существует два способа создания копий для данного объекта с помощью модуля copy.
Shallow Copy – это побитовая копия объекта. Созданный скопированный объект имеет точную копию значений в исходном объекте. Если одно из значений является ссылкой на другие объекты, копируются только адреса ссылок на них.
Deep Copy – рекурсивно копирует все значения от исходного объекта к целевому, т. е. дублирует даже объекты, на которые ссылается исходный объект.
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
В Python оператор присваивания (=) не копирует объекты. Вместо этого он создает связь между существующим объектом и именем целевой переменной. Чтобы создать копии объекта в Python, необходимо использовать модуль copy. Более того, существует два способа создания копий для данного объекта с помощью модуля copy.
Shallow Copy – это побитовая копия объекта. Созданный скопированный объект имеет точную копию значений в исходном объекте. Если одно из значений является ссылкой на другие объекты, копируются только адреса ссылок на них.
Deep Copy – рекурсивно копирует все значения от исходного объекта к целевому, т. е. дублирует даже объекты, на которые ссылается исходный объект.
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾Какие отличия между массивом и списком в Python?
Массивы содержат только элементы одинаковых типов данных, то есть тип данных массива должен быть однородным. Массивы потребляют меньше памяти.
Списки содержат элементы разных типов данных, то есть тип данных списков может быть неоднородным. Их недостатком является потребление большого объема памяти.
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Массивы содержат только элементы одинаковых типов данных, то есть тип данных массива должен быть однородным. Массивы потребляют меньше памяти.
Списки содержат элементы разных типов данных, то есть тип данных списков может быть неоднородным. Их недостатком является потребление большого объема памяти.
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾Классы/Объекты Python (Часть 1)
Python это объектно-ориентированный язык программирования.
Почти все в Python является объектом со своими свойствами и методами.
Класс подобен конструктору объектов или «чертежу» для создания объектов.
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Python это объектно-ориентированный язык программирования.
Почти все в Python является объектом со своими свойствами и методами.
Класс подобен конструктору объектов или «чертежу» для создания объектов.
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾Создать класс/объект
Чтобы создать класс, используйте ключевое слово class
Пример:
Создайте класс с именем MyClass со свойством с именем x:
class MyClass:
x = 5
Создать объект
Теперь мы можем использовать класс с именем MyClass для создания объектов:
Пример:
Создайте объект с именем p1 и выведите значение x:
p1 = MyClass()
print(p1.x)
Функция init()
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Чтобы создать класс, используйте ключевое слово class
Пример:
Создайте класс с именем MyClass со свойством с именем x:
class MyClass:
x = 5
Создать объект
Теперь мы можем использовать класс с именем MyClass для создания объектов:
Пример:
Создайте объект с именем p1 и выведите значение x:
p1 = MyClass()
print(p1.x)
Функция init()
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Learn frontend tips - telegram-канал в котором вы найдёте подсказки для frontend разработчиков по:
✓ HTML
✓ CSS
✓ JavaScript
✓ UX/UI
✓ HTML
✓ CSS
✓ JavaScript
✓ UX/UI
🧾Функция int
Чтобы понять значение классов, мы должны понять встроенную функцию int().
Все классы имеют функцию init(), которая всегда выполняется при инициализации класса.
Используйте функцию init() для присвоения значений свойствам объекта или других операций, которые необходимо выполнить при создании объекта.
Пример:
Создайте класс с именем Person, используйте функцию init() для присвоения значений имени и возрасту:
class Person:
def init(self, name, age):
self.name = name
self.age = age
p1 = Person("Андрей", 52)
print(p1.name)
print(p1.age)
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Чтобы понять значение классов, мы должны понять встроенную функцию int().
Все классы имеют функцию init(), которая всегда выполняется при инициализации класса.
Используйте функцию init() для присвоения значений свойствам объекта или других операций, которые необходимо выполнить при создании объекта.
Пример:
Создайте класс с именем Person, используйте функцию init() для присвоения значений имени и возрасту:
class Person:
def init(self, name, age):
self.name = name
self.age = age
p1 = Person("Андрей", 52)
print(p1.name)
print(p1.age)
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾Методы объекта
Объекты также могут содержать методы. Методы в объектах — это функции, принадлежащие объекту.
Создадим метод в классе Person.
Пример:
Вставьте функцию, которая печатает приветствие, и выполните ее для объекта p1.
class Person:
def init(self, name, age):
self.name = name
self.age = age
def myfunc(self):
print("Привет, меня зовут " + self.name)
p1 = Person("Андрей", 52)
p1.myfunc())
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Объекты также могут содержать методы. Методы в объектах — это функции, принадлежащие объекту.
Создадим метод в классе Person.
Пример:
Вставьте функцию, которая печатает приветствие, и выполните ее для объекта p1.
class Person:
def init(self, name, age):
self.name = name
self.age = age
def myfunc(self):
print("Привет, меня зовут " + self.name)
p1 = Person("Андрей", 52)
p1.myfunc())
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾Собственный параметр
Параметр self является ссылкой на текущий экземпляр класса и используется для доступа к переменным, принадлежащим классу.
Его не обязательно называть self , вы можете называть его как угодно, но он должен быть первым параметром любой функции в классе.
Пример:
Используйте слова mysillyobject и abc вместо self.
class Person:
def init(mysillyobject, name, age):
mysillyobject.name = name
mysillyobject.age = age
def myfunc(abc):
print("Привет, меня зовут " + abc.name)
p1 = Person("Андрей", 52)
p1.myfunc()
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Параметр self является ссылкой на текущий экземпляр класса и используется для доступа к переменным, принадлежащим классу.
Его не обязательно называть self , вы можете называть его как угодно, но он должен быть первым параметром любой функции в классе.
Пример:
Используйте слова mysillyobject и abc вместо self.
class Person:
def init(mysillyobject, name, age):
mysillyobject.name = name
mysillyobject.age = age
def myfunc(abc):
print("Привет, меня зовут " + abc.name)
p1 = Person("Андрей", 52)
p1.myfunc()
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾Изменить свойства объекта
Вы можете изменять свойства объектов следующим образом.
Пример:
Установите возраст p1 на 40.
p1.age = 40
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Вы можете изменять свойства объектов следующим образом.
Пример:
Установите возраст p1 на 40.
p1.age = 40
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾Удалить свойства объекта
Вы можете удалить свойства объектов с помощью ключевого слова del
Пример
Удалите свойство age из объекта p1:
del p1.age
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Вы можете удалить свойства объектов с помощью ключевого слова del
Пример
Удалите свойство age из объекта p1:
del p1.age
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾Удалить объекты
Вы можете удалять объекты с помощью ключевого слова del
Пример:
Удалите объект p1.
del p1
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Вы можете удалять объекты с помощью ключевого слова del
Пример:
Удалите объект p1.
del p1
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾Заявление о пропуске
Определения класса не могут быть пустыми, но если по какой-то причине у вас есть определение class без содержимого, добавьте оператор pass чтобы избежать ошибки.
Пример:
class Person:
pass
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Определения класса не могут быть пустыми, но если по какой-то причине у вас есть определение class без содержимого, добавьте оператор pass чтобы избежать ошибки.
Пример:
class Person:
pass
📋 #Backend #Python #Совет
▬▬▬▬▬▬▬▬
// How To WebDev