📔 Day 2
Типы данных
В предыдущем разделе мы немного упомянули о типах данных. Данные или значения имеют типы данных. Типы данных описывают характеристики данных. Типы данных можно разделить на два вида
- Примитивные типы данных
- Непримитивные типы данных (ссылки на объекты)
Примитивные типы данных
Примитивные типы данных в JavaScript включают в себя:
- Числа (Numbers) - Целые числа, числа с плавающей точкой
- Строки (Strings) - Любые данные в одинарных или двойных кавычках
- Булевые (boolean) - true или false значения
- Null - пустое значение или нет значения
- Undefined - объявленная переменная без значения
Непримитивные типы данных в JavaScript включают в себя:
- Объекты
- Функции
- Массивы
Теперь давайте посмотрим, что именно означают примитивные и не примитивные типы данных.
Примитивные типы данных являются неизменяемыми типами данных. Как только примитивный тип данных создан, мы не можем его изменить.
Пример
Если мы попытаемся изменить строку, хранящуюся в переменной word, JavaScript вызовет ошибку. Любой тип данных с одинарными, двойными или обратными кавычками является строковым типом данных.
Это выражение не изменяет строку, хранящуюся в переменной word. Таким образом, мы можем сказать, что строки не являются изменяемыми или неизменяемыми. Примитивные типы данных сравниваются по их значениям. Давайте сравним различные значения данных. Смотрите пример ниже:
let numOne = 3;
let numTwo = 3;
console.log(numOne == numTwo); // true
let js = "JavaScript";
let py = "Python";
console.log(js == py); //false
let lightOn = true;
let lightOff = false;
console.log(lightOn == lightOff); // false
Непримитивные типы данных
Непримитивные типы данных являются изменяемыми. Мы можем изменить значение непримитивных типов данных после их создания. Давайте посмотрим, создав массив. Массив - это список значений данных в квадратных скобках. Массивы могут содержать одинаковые или разные типы данных. На значения массива ссылается их индекс. В массиве JavaScript индекс начинается с нуля. Т.е. первый элемент массива находится с нулевым индексом, второй элемент с индексом один и третий элемент с индексом два и т.д.
Как вы можете видеть, массив, в котором непримитивный тип данных является изменяемым. Непримитивные типы данных нельзя сравнивать по значению. Даже если два непримитивных типа данных имеют одинаковые свойства и значения, они не являются строго равными.
let nums = [1, 2, 3];
let numbers = [1, 2, 3];
console.log(nums == numbers); // false
let userOne = {
name: "Asabeneh",
role: "teaching",
country: "Finland"
};
let userTwo = {
name: "Asabeneh",
role: "teaching",
country: "Finland"
};
console.log(userOne == userTwo); // false
Основное правило, мы не сравниваем непримитивные типы данных. Не сравнивайте массив, функцию или объект. Непримитивные значения называются ссылочными типами, потому что они сравниваются по ссылке, а не по значению. Два объекта строго равны, если они ссылаются на один и тот же базовый объект.
let nums = [1, 2, 3];
let numbers = nums;
console.log(nums == numbers); // true
let userOne = {
name: "Asabeneh",
role: "teaching",
country: "Finland"
};
let userTwo = userOne;
console.log(userOne == userTwo); // true
Если вам трудно понять разницу между примитивными типами данных и не примитивными типами данных, вы не единственный. Успокойтесь и просто перейдите к следующему разделу и попробуйте вернуться через некоторое время. Теперь давайте начнём типы данных по типу номера.
Числа
Числа представляют собой целые и десятичные значения, которые могут выполнять все арифметические операции. Давайте посмотрим некоторые примеры чисел.
Объявление числовых типов данных
let age = 35;
const gravity = 9.81; //мы используем const для неизменных значений, гравитационная постоянная в m/s2
let mass = 72; // масса в килограммах
const PI = 3.14; // ПИ геометрическая постоянная
//Больше примеров
const boilingPoint = 100; // температура в oC, температура кипения воды которой постоянна
const bodyTemp = 37; // oC средняя температура тела человека, которая является постоянной
console.log(age, gravity, mass, PI, boilingPoint, bodyTemp);
Математический объект
В JavaScript Math Object предоставляет множество методов для работы с числами.
const PI = Math.PI;
console.log(PI); // 3.141592653589793
// Округление до ближайшего числа
// если выше .5 вверх, если меньше 0.5 вниз
console.log(Math.round(PI)); // 3, чтобы округлить значения до ближайшего числа
console.log(Math.round(9.81)); // 10
console.log(Math.floor(PI)); // 3 округление вниз
console.log(Math.ceil(PI)); // 4 округление вверх
console.log(Math.min(-5, 3, 20, 4, 5, 10)); // -5, возвращает минимальное значение
console.log(Math.max(-5, 3, 20, 4, 5, 10)); // 20, возвращает максимальное значение
const randNum = Math.random(); // создаёт случайное число от 0 до 0,999999
console.log(randNum);
// Давайте создадим случайное число от 0 до 10
const num = Math.floor(Math.random() * 11); // создаёт случайное число от 0 до 10
console.log(num);
// Абсолютное значение
console.log(Math.abs(-10)); //10
// Квадратный корень
console.log(Math.sqrt(100)); // 10
console.log(Math.sqrt(2)); //1.4142135623730951
// Мощность
console.log(Math.pow(3, 2)); // 9
console.log(Math.E); // 2.718
// Логарифм
// Возвращает натуральный логарифм основания E из x, Math.log(x)
console.log(Math.log(2)); // 0.6931471805599453
console.log(Math.log(10)); // 2.302585092994046
// Тригонометрия
Math.sin(0);
Math.sin(60);
Math.cos(0);
Math.cos(60);
Генератор случайных чисел
JavaScript Math Object имеет генератор номеров метода random()
, который генерирует числа от 0 до 0.999999999...
Теперь давайте посмотрим, как мы можем использовать метод random()
для генерации случайного числа от 0 до 10 включительно.
let randomNum = Math.random(); // генерирует от 0 до 0,999
let numBtnZeroAndTen = randomNum * 11;
console.log(numBtnZeroAndTen); // это даёт: мин 0 и макс 10.99
let randomNumRoundToFloor = Math.floor(numBtnZeroAndTen);
console.log(randomNumRoundToFloor); // это даёт от 0 до 10
Строки
Строки - это тексты, которые заключены в одинарную или двойную кавычку. Чтобы объявить строку, нам нужно имя переменной, оператор присваивания, значение в одинарных кавычках, двойные кавычки или обратные кавычки.
Давайте посмотрим несколько примеров строки:
let space = " "; // Пусто - пробел
let firstName = "Asabeneh";
let lastName = "Yetayeh";
let country = "Finland";
let city = "Helsinki";
let language = "JavaScript";
let job = "teacher";
Конкатенация строк
Соединение двух или более строк вместе называется конкатенацией.
// Объявление разных переменных разных типов данных
let space = " ";
let firstName = "Asabeneh";
let lastName = "Yetayeh";
let country = "Finland";
let city = "Helsinki";
let language = "JavaScript";
let job = "teacher";
let fullName = firstName + space + lastName; // конкатенация, объединение двух строк.
console.log(fullName);
Мы можем объединять строки разными способами.
Конкатенация с использованием оператора сложения
Конкатенация с использованием оператора сложения - старый способ. Этот способ объединения утомителен и подвержен ошибкам. Полезно знать, как объединить таким способом, но я настоятельно рекомендую использовать шаблонные строки ES6.
// Объявление разных переменных разных типов данных
let space = " ";
let firstName = "Asabeneh";
let lastName = "Yetayeh";
let country = "Finland";
let city = "Helsinki";
let language = "JavaScript";
let job = "teacher";
let age = 250;
let fullName = firstName + space + lastName;
let personInfoOne = fullName + ". I am " + age + ". I live in " + country; // ES5
console.log(personInfoOne);
Длинные буквенные строки
Строка может быть отдельным символом, абзацем или страницей. Если длина строки слишком велика, она не помещается в одну строку. Мы можем использовать символ обратной косой черты (\) в конце каждой строки, чтобы указать, что строка будет продолжена на следующей строке.
Пример:
const paragraph =
"My name is Asabeneh Yetayeh. I live in Finland, Helsinki.\
I am a teacher and I love teaching. I teach HTML, CSS, JavaScript, React, Redux, \
Node.js, Python, Data Analysis and D3.js for anyone who is interested to learn. \
In the end of 2019, I was thinking to expand my teaching and to reach \
to global audience and I started a Python challenge from November 20 - December 19.\
It was one of the most rewarding and inspiring experience.\
Now, we are in 2020. I am enjoying preparing the 30DaysOfJavaScript challenge and \
I hope you are enjoying too.";
console.log(paragraph);
Перенос последовательности в строке
В JavaScript и других языках программирования, после некоторых символов есть перенос - последовательности. Давайте посмотрим на наиболее распространённые escape-символы:
\n
- Новая строка\t
- Таб означает (8 пробелов)\\
- Обратная косая черта\'
- Одинарные кавычки (')\"
- Двойные кавычки (")
console.log(
"I hope every one is enjoying the 30 Days Of JavaScript challenge.\nDo you ?"
); // line break
console.log("Days\tTopics\tExercises");
console.log("Day 1\t3\t5");
console.log("Day 2\t3\t5");
console.log("Day 3\t3\t5");
console.log("Day 4\t3\t5");
console.log("This is a back slash symbol (\\)"); // To write a back slash
console.log('In every programming language it starts with "Hello, World!"');
console.log("In every programming language it starts with 'Hello, World!'");
console.log("The saying 'Seeing is Believing' is't correct in 2020");
Шаблонные литералы (Шаблонные строки)
Чтобы создать строку шаблона, мы используем два обратных ключа. Мы можем вставить данные как выражение внутри строки шаблона. Чтобы ввести данные, мы заключаем выражение в фигурную скобку ({}
), предшествует которой знак $
. Смотрите синтаксис ниже.
Пример: 1
console.log(`The sum of 2 and 3 is 5`); // статическая запись данных
let a = 2;
let b = 3;
console.log(`The sum of ${a} and ${b} is ${a + b}`); // ввод данных динамически
Example:2
let firstName = "Asabeneh";
let lastName = "Yetayeh";
let country = "Finland";
let city = "Helsinki";
let language = "JavaScript";
let job = "teacher";
let age = 250;
let fullName = firstName + " " + lastName;
let personInfoTwo = `I am ${fullName}. I am ${age}. I live in ${country}.`; //ES6 - Метод строковой интерполяции
let personInfoThree = `I am ${fullName}. I live in ${city}, ${country}. I am a ${job}. I teach ${language}.`;
console.log(personInfoTwo);
console.log(personInfoThree);
I am Asabeneh Yetayeh. I am 250. I live in Finland.
I am Asabeneh Yetayeh. I live in Helsinki, Finland. I am a teacher. I teach JavaScript.
Используя шаблон строки или метод интерполяции строки, мы можем добавить выражение, которое может быть значением или некоторыми операциями (сравнение, арифметические операции, троичные операции).
Строковые Методы
Все в JavaScript это объект. Строка - это примитивный тип данных, который означает, что мы не можем изменить его после создания. У строкового объекта есть много строковых методов. Существуют разные строковые методы, которые могут помочь нам работать со строками.
- length: Метод строки length возвращает количество символов в строке, включая пустое пространство. Пример:
let js = "JavaScript";
console.log(js.length); // 10
let firstName = "Asabeneh";
console.log(firstName.length); // 8
- Доступ к символам в строке: мы можем получить доступ к каждому символу в строке, используя его индекс. В программировании отсчёт начинается с 0. Первый индекс строки равен нулю, а последний индекс равен одному минус длина строки.
Давайте получим доступ к различным символам в строке «JavaScript».
let string = "JavaScript";
let firstLetter = string[0];
console.log(firstLetter); // J
let secondLetter = string[1]; // a
let thirdLetter = string[2];
let lastLetter = string[9];
console.log(lastLetter); // t
let lastIndex = string.length - 1;
console.log(lastIndex); // 9
console.log(string[lastIndex]); // t
toUpperCase()
: этот метод изменяет строку на заглавные буквы.
let string = "JavaScript";
console.log(string.toUpperCase()); // JAVASCRIPT
let firstName = "Asabeneh";
console.log(firstName.toUpperCase()); // ASABENEH
let country = "Finland";
console.log(country.toUpperCase()); // FINLAND
toLowerCase()
: этот метод изменяет строку на заглавные буквы
let string = "JavasCript";
console.log(string.toLowerCase()); // javascript
let firstName = "Asabeneh";
console.log(firstName.toLowerCase()); // asabeneh
let country = "Finland";
console.log(country.toLowerCase()); // finland
substr()
:Требуется два аргумента: начальный индекс и количество символов для нарезки.
let string = "JavaScript";
console.log(string.substr(4, 6)); // Script
let country = "Finland";
console.log(country.substr(3, 4)); // land
substring()
: Он принимает два аргумента: начальный индекс и индекс остановки, но он не включает индекс остановки.
let string = "JavaScript";
console.log(string.substring(0, 4)); // Java
console.log(string.substring(4, 10)); // Script
console.log(string.substring(4)); // Script
let country = "Finland";
console.log(country.substring(0, 3)); // Fin
console.log(country.substring(3, 7)); // land
console.log(country.substring(3)); // land
split()
: Методsplit()
разделяет строку в указанном месте.
let string = "30 Days Of JavaScript";
console.log(string.split()); // ["30 Days Of JavaScript"]
console.log(string.split(" ")); // ["30", "Days", "Of", "JavaScript"]
let firstName = "Asabeneh";
console.log(firstName.split()); // ["Asabeneh"]
console.log(firstName.split("")); // ["A", "s", "a", "b", "e", "n", "e", "h"]
let countries = "Finland, Sweden, Norway, Denmark, and Iceland";
console.log(countries.split(",")); // ["Finland", " Sweden", " Norway", " Denmark", " and Iceland"]
console.log(countries.split(", ")); // ["Finland", "Sweden", "Norway", "Denmark", "and Iceland"]
trim()
: Удаляет пробелы в начале или конце строки.
let string = " 30 Days Of JavaScript ";
console.log(string);
console.log(string.trim(" "));
let firstName = " Asabeneh ";
console.log(firstName);
console.log(firstName.trim());
includes()
: принимает аргумент подстроки и проверяет, существует ли аргумент подстроки в строке.includes()
возвращает логическое значение. Он проверяет, существует ли подстрока в строке, и возвращает true, если она существует, и false, если она не существует.
let string = "30 Days Of JavaScript";
console.log(string.includes("Days")); // true
console.log(string.includes("days")); // false
console.log(string.includes("Script")); // true
console.log(string.includes("script")); // false
console.log(string.includes("java")); // false
console.log(string.includes("Java")); // true
let country = "Finland";
console.log(country.includes("fin")); // false
console.log(country.includes("Fin")); // true
console.log(country.includes("land")); // true
console.log(country.includes("Land")); // false
-
replace()
: принимает к параметру старую подстроку и новую подстроку. -
charAt()
: принимает индекс и возвращает значение по этому индексу -
charCodeAt()
: Принимает индекс и возвращает код символа (номер ASCII) значения по этому индексу -
indexOf()
: Принимает подстроку, и если подстрока существует в строке, она возвращает первую позицию подстроки, если не существует, она возвращает -1let string = "30 Days Of JavaScript"; console.log(string.indexOf("D")); // 3 console.log(string.indexOf("Days")); // 3 console.log(string.indexOf("days")); // -1 console.log(string.indexOf("a")); // 4 console.log(string.indexOf("JavaScript")); // 11 console.log(string.indexOf("Script")); //15 console.log(string.indexOf("script")); // -1
-
lastIndexOf()
: Принимает подстроку, и если подстрока существует в строке, она возвращает последнюю позицию подстроки, если она не существует, она возвращает -1 -
concat()
: он принимает множество подстрок и конкатенирует их. -
startsWith
: он принимает подстроку в качестве аргумента и проверяет, начинается ли строка с указанной подстроки. Возвращает логическое значение (true или false).let string = "Love is the best to in this world"; console.log(string.startsWith("Love")); // true console.log(string.startsWith("love")); // false console.log(string.startsWith("world")); // false let country = "Finland"; console.log(country.startsWith("Fin")); // true console.log(country.startsWith("fin")); // false console.log(country.startsWith("land")); // false
-
endsWith
: он принимает подстроку в качестве аргумента и проверяет, заканчивается ли строка указанной подстрокой. Возвращает логическое значение (true или false).let string = "Love is the best to in this world"; console.log(string.endsWith("world")); // true console.log(string.endsWith("love")); // false console.log(string.endsWith("in this world")); // true let country = "Finland"; console.log(country.endsWith("land")); // true console.log(country.endsWith("fin")); // false console.log(country.endsWith("Fin")); // false
-
search
: он принимает подстроку в качестве аргумента и возвращает индекс первого совпадения. -
match
: он принимает подстроку или шаблон регулярного выражения в качестве аргумента и возвращает массив, если есть совпадение, если нет, то возвращает ноль. Давайте посмотрим, как выглядит шаблон регулярного выражения. Он начинается с / знака и заканчивается / знаком.let string = "love"; let patternOne = /love/; //без какого-либо флага let patternTwo = /love/gi; // g-означает поиск по всему тексту, i - без учета регистра
Match syntax
let string = "I love JavaScript. If you do not love JavaScript what else can you love."; console.log(string.match("love"));
["love", index: 2, input: "I love JavaScript. If you do not love JavaScript what else can you love.", groups: undefined]
Давайте извлечём числа из текста, используя регулярное выражение. Это не раздел регулярных выражений, не паникуйте, мы рассмотрим регулярные выражения в другом разделе.
let txt = "In 2019, I run 30 Days of Python. Now, in 2020 I super exited to start this challenge"; let regEx = /\d+/; // d с escape-символом означает, что d - не просто символ d, а обозначает цифру // + означает одно или несколько цифр, // если после этого есть g, значит глобальный, ищите везде. console.log(txt.match(regEx)); // ["2", "0", "1", "9", "3", "0", "2", "0", "2", "0"] console.log(txt.match(/\d+/g)); // ["2019", "30", "2020"]
-
repeat()
: он принимает числовой аргумент и возвращает повторную версию строки.
Проверка типов данных и приведение
Проверка типов данных
- Проверка типов данных: чтобы проверить тип данных определённого типа данных, мы используем
typeof
и также меняем один тип данных на другой.
Пример:
// Различные типы данных JavaScript
// Давайте объявим разные типы данных
let firstName = "Asabeneh"; // string
let lastName = "Yetayeh"; // string
let country = "Finland"; // string
let city = "Helsinki"; // string
let age = 250; // number, это не мой настоящий возраст, не переживай
let job; // undefined, потому что значение не было присвоено
console.log(typeof "Asabeneh"); // string
console.log(typeof firstName); // string
console.log(typeof 10); // number
console.log(typeof 3.14); // number
console.log(typeof true); // boolean
console.log(typeof false); // boolean
console.log(typeof NaN); // number
console.log(typeof job); // undefined
console.log(typeof undefined); // undefined
console.log(typeof null); // object
Изменение типа данных (Casting)
- Приведение: преобразование одного типа данных в другой тип данных. Мы используем parseInt(), parseFloat(), Number(), +sign, str(). Когда мы выполняем арифметические операции, строковые числа должны быть сначала преобразованы в целое число или число с плавающей запятой, если нет, это возвращает ошибку.
Строка в число
Мы можем преобразовать номер строки в число. Любое число внутри кавычки является строковым числом. Пример номера строки: «10», «5» и т. Д. Мы можем преобразовать строку в число, используя следующие методы:
- parseInt()
- Number()
- Plus sign(+)
Строка в число с плавающей запятой
Мы можем преобразовать число с плавающей запятой в число с плавающей запятой. Любое число с плавающей запятой внутри кавычки является строковым числом с плавающей запятой. Пример числа с плавающей запятой: «9,81», «3,14», «1,44» и т. Д. Мы можем преобразовать строку с плавающей точкой в число, используя следующие методы:
- parseFloat()
- Number()
- Plus sign(+)
Числа с плавающей точкой в целые числа.
Мы можем преобразовать числа с плавающей точкой в целые числа. Мы используем следующий метод для преобразования float в int:
- parseInt()
🌕 Ты молодец. Ты только что завершил 2-й день испытаний, и ты в двух шагах от своего пути к успеху. Теперь сделай несколько упражнений для мозга и твоих мышц.
💻 День 2: Упражнения
Упражнение: Уровень 1
- Объявите вызов имени переменной и присвойте ему начальное значение «30 дней JavaScript».
- Напечатайте строку в консоли браузера, используя
console.log()
- Напечатайте length строки в консоли браузера, используя
console.log()
- Измените всю строку на заглавные буквы, используя метод
toUpperCase()
- Измените всю строку на строчные буквы, используя метод
toLowerCase()
- Вырежьте (нарежьте) первое слово строки, используя метод
substr()
илиsubstring()
- Вырежьте фразу Days Of JavaScript из 30 Days Of JavaScript.
- Проверьте, содержит ли строка слово Script, используя метод
includes()
- Разбейте строку на массив, используя метод
split()
- Разбить строку 30 Days Of JavaScript в пространстве с помощью метода
split()
- «Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon» разбейте строку где разделитель - запятая и замените её на массив.
- Измените 30 Days Of JavaScript на 30 Days Of Python, используя метод
replace()
. - Какой символ в индексе 15 в строке «30 Days Of JavaScript», используйте метод
charAt()
. - Какой код символа J в строке «30 Days Of JavaScript» с использованием
charCodeAt()
- Используйте
indexOf
, чтобы определить позицию первого вхождения за 30 Days Of JavaScript - Используйте
lastIndexOf
, чтобы определить позицию последнего вхождения в 30 Days Of JavaScript. - Используйте
indexOf
, чтобы найти позицию первого вхождения слова потому что в следующем предложении: «Вы не можете закончить предложение, потому что, потому что, потому что это соединение» - Используйте
lastIndexOf
, чтобы найти позицию последнего вхождения слова потому что в следующем предложении: «Вы не можете закончить предложение, потому что, потому что потому что это соединение» - Используйте
search
, чтобы найти позицию первого вхождения слова потому что в следующем предложении: «Вы не можете закончить предложение, потому что, потому что потому что это соединение» - Используйте
trim()
, чтобы удалить все пробелы в начале и конце строки. Например, «30 Days Of JavaScript». - Используйте метод
startsWith()
со строкой 30 Days Of JavaScript, чтобы сделать результат верным - Используйте метод
endsWith()
со строкой 30 Days Of JavaScript, чтобы сделать результат верным - Используйте метод
match()
, чтобы найти все "а" в "30 Days Of JavaScript" - Используйте
concat()
и объедините «30 Days» и «JavaScript» в одну строку «30 Days Of JavaScript» - Используйте метод
repeat()
, чтобы напечатать 30 Days Of JavaScript 2 раза
Упражнение: уровень 2
- Используя
console.log()
, выведите следующее утверждение.
The quote 'There is no exercise better for the heart than reaching down and lifting people up.' by John Holmes teaches us to help one another.
- Используя
console.log()
распечатайте следующую цитату Матери Терезы.
"Love is not patronizing and charity isn't about pity, it is about love. Charity and love are the same -- with charity you give love, so don't just give money but reach out your hand instead."
- Проверьте, точно ли
typeof
'10' равен 10. Если нет, сделайте его точно равным. - Убедитесь, что
parseFloat('9.8')
равен 10, если не равен точно 10. - Проверьте, найдено ли 'он' как в Питон, так и в жаргоне
- Я надеюсь, что этот курс не полон жаргона. Проверьте, находится ли жаргон в предложении.
- Сгенерируйте случайное число от 0 до 100 включительно.
- Сгенерируйте случайное число от 50 до 100 включительно.
- Сгенерируйте случайное число от 0 до 255 включительно.
- Получите доступ к символам строки «JavaScript», используя случайное число.
-
Используйте
console.log()
и управляющие символы для печати следующего шаблона. -
Используйте
substr
, чтобы вырезать фразу потому что потому что в следующем предложении: 'Вы не можете закончить предложение, потому что потому что потому что это соединение'
Упражнения: уровень 3
- «Любовь - лучшая вещь в этом мире. Некоторые нашли свою любовь, а некоторые все ещё ищут свою любовь. Подсчитайте количество слов "любовь" в этом предложении.
- Используйте
match()
, чтобы сосчитать число все "потому что" в следующем предложении: «Вы не можете закончить предложение, потому что, потому что, потому что это соединение» - Очистите следующий текст и найдите наиболее часто встречающееся слова (подсказка, используйте замену и регулярные выражения).
const sentence =
"%I $am@% a %tea@cher%, &and& I lo%#ve %te@a@ching%;. The@re $is no@th@ing; &as& mo@re rewarding as educa@ting &and& @emp%o@weri@ng peo@ple. ;I found tea@ching m%o@re interesting tha@n any ot#her %jo@bs. %Do@es thi%s mo@tiv#ate yo@u to be a tea@cher!? %Th#is 30#Days&OfJavaScript &is al@so $the $resu@lt of &love& of tea&ching";
- Рассчитайте общий годовой доход человека, извлекая цифры из следующего текста. «Он зарабатывает 5000 евро с зарплаты в месяц, годовой бонус в 10000 евро, онлайн-курсы в 15000 евро в месяц».
🎉 ПОЗДРАВЛЯЕМ! 🎉