🧾Методы примитивов
JavaScript позволяет нам работать с примитивными типами данных – строками, числами и т.д., как будто они являются объектами.
Поэтому давайте взглянем на ключевые различия между примитивами и объектами.
Примитив – это значение «примитивного» типа.
Есть 7 примитивных типов: string, number, boolean, symbol, null, undefined и bigint.
А объект может хранить множество значений как свойства.
Объявляется при помощи фигурных скобок "{}», например: «{name: "Рома", age: 30}». В JavaScript есть и другие виды объектов: например, функции тоже являются объектами.
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
JavaScript позволяет нам работать с примитивными типами данных – строками, числами и т.д., как будто они являются объектами.
Поэтому давайте взглянем на ключевые различия между примитивами и объектами.
Примитив – это значение «примитивного» типа.
Есть 7 примитивных типов: string, number, boolean, symbol, null, undefined и bigint.
А объект может хранить множество значений как свойства.
Объявляется при помощи фигурных скобок "{}», например: «{name: "Рома", age: 30}». В JavaScript есть и другие виды объектов: например, функции тоже являются объектами.
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾Числа
В современном JavaScript существует два типа чисел:
Обычные числа в JavaScript хранятся в 64-битном формате IEEE-754, который также называют «числа с плавающей точкой двойной точности» (double precision floating point numbers). Это числа, которые используются чаще всего.
BigInt числа дают возможность работать с целыми числами произвольной длины. Они нужны достаточно редко и используются в случаях, когда необходимо работать со значениями более чем (253-1) или менее чем -(253-1).
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
В современном JavaScript существует два типа чисел:
Обычные числа в JavaScript хранятся в 64-битном формате IEEE-754, который также называют «числа с плавающей точкой двойной точности» (double precision floating point numbers). Это числа, которые используются чаще всего.
BigInt числа дают возможность работать с целыми числами произвольной длины. Они нужны достаточно редко и используются в случаях, когда необходимо работать со значениями более чем (253-1) или менее чем -(253-1).
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾 Цикл for в Python
В Python цикл for – это цикл перебора последовательности. Он состоит из двух компонентов: переменной (переменных) цикла и последовательности.
А функция range возвращает диапазон (последовательность) целых чисел. Range может принимать 1, 2 или 3 аргумента.
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
В Python цикл for – это цикл перебора последовательности. Он состоит из двух компонентов: переменной (переменных) цикла и последовательности.
А функция range возвращает диапазон (последовательность) целых чисел. Range может принимать 1, 2 или 3 аргумента.
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾 Цикл while в Python
Цикл while позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно. Условие записывается после ключевого слова while и проверяется до выполнения тела цикла.
Этот цикл используется, когда невозможно определить точное количество повторений цикла.
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Цикл while позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно. Условие записывается после ключевого слова while и проверяется до выполнения тела цикла.
Этот цикл используется, когда невозможно определить точное количество повторений цикла.
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾 Список в Python
Список – это непрерывная динамическая коллекция элементов. Каждому элементу списка присваивается порядковый номер – его индекс. Первый индекс равен нулю, второй - единице и так далее. Основные операции для работы со списками - это индексирование, срезы, добавление и удаление элементов, а также проверка на наличие элемента в последовательности.
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Список – это непрерывная динамическая коллекция элементов. Каждому элементу списка присваивается порядковый номер – его индекс. Первый индекс равен нулю, второй - единице и так далее. Основные операции для работы со списками - это индексирование, срезы, добавление и удаление элементов, а также проверка на наличие элемента в последовательности.
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾 Индексирование в Python
Что такое индексирование? Это операция обращения к элементу по его порядковому номеру (нумерация начинается с нуля).
Индексирование работает и в обратную сторону. Мы просто обращаемся к элементу списка по отрицательному индексу. Индекс с номером -1 дает доступ к последнему элементу, -2 к предпоследнему и так далее.
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Что такое индексирование? Это операция обращения к элементу по его порядковому номеру (нумерация начинается с нуля).
Индексирование работает и в обратную сторону. Мы просто обращаемся к элементу списка по отрицательному индексу. Индекс с номером -1 дает доступ к последнему элементу, -2 к предпоследнему и так далее.
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾 Создание списка в Python
Списки в Python являются изменяемым типом данных. Мы можем изменять содержимое каждой из ячеек:
fruits = ['Apple', 'Grape', 'Peach', 'Banan', 'Orange']
fruits[0] = 'Watermelon'
fruits[3] = 'Lemon'
print(fruits)
>>> ['Watermelon', 'Grape', 'Peach', 'Lemon', 'Orange']
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Списки в Python являются изменяемым типом данных. Мы можем изменять содержимое каждой из ячеек:
fruits = ['Apple', 'Grape', 'Peach', 'Banan', 'Orange']
fruits[0] = 'Watermelon'
fruits[3] = 'Lemon'
print(fruits)
>>> ['Watermelon', 'Grape', 'Peach', 'Lemon', 'Orange']
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾 Создание списка в Python с помощью list
Создать список в Python можно также с помощью функции list. В неё мы можем передать любой итерируемый объект, с помощью которого можно запустить цикл.
Рассмотрим несколько примеров:
letters = list('abcdef')
numbers = list(range(10))
even_numbers = list(range(0, 10, 2))
print(letters)
print(numbers)
print(even_numbers)
>>> ['a', 'b', 'c', 'd', 'e', 'f'
>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [0, 2, 4, 6, 8]
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Создать список в Python можно также с помощью функции list. В неё мы можем передать любой итерируемый объект, с помощью которого можно запустить цикл.
Рассмотрим несколько примеров:
letters = list('abcdef')
numbers = list(range(10))
even_numbers = list(range(0, 10, 2))
print(letters)
print(numbers)
print(even_numbers)
>>> ['a', 'b', 'c', 'd', 'e', 'f'
>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [0, 2, 4, 6, 8]
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾 Длина списка в Python
Как узнать длину списка? Есть два варианта, можно просто посчитать количество элементов, но есть способ проще, функция len.
Функция len возвращает длину любой итерируемой переменной, переменной, по которой можно запустить цикл.
Например:
fruits = ['Apple', 'Grape', 'Peach', 'Banan', 'Orange']
print(len(fruits))
>>> 5
numbers = [40, 20, 90]
print(len(numbers))
>>> 3
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Как узнать длину списка? Есть два варианта, можно просто посчитать количество элементов, но есть способ проще, функция len.
Функция len возвращает длину любой итерируемой переменной, переменной, по которой можно запустить цикл.
Например:
fruits = ['Apple', 'Grape', 'Peach', 'Banan', 'Orange']
print(len(fruits))
>>> 5
numbers = [40, 20, 90]
print(len(numbers))
>>> 3
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾 Срезы в Python
Срезом называется некоторая подпоследовательность. Принцип действия срезов очень прост: мы "отрезаем" кусок от исходной последовательности элемента, не меняя её при этом. Срезы могут работать не только со списками, но и с другими итерируемыми типами данных, например со строками.
fruits = ['Apple', 'Grape', 'Peach', 'Banan', 'Orange']
part_of_fruits = fruits[0:3]
print(part_of_fruits)
>>> ['Apple', 'Grape', 'Peach']
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Срезом называется некоторая подпоследовательность. Принцип действия срезов очень прост: мы "отрезаем" кусок от исходной последовательности элемента, не меняя её при этом. Срезы могут работать не только со списками, но и с другими итерируемыми типами данных, например со строками.
fruits = ['Apple', 'Grape', 'Peach', 'Banan', 'Orange']
part_of_fruits = fruits[0:3]
print(part_of_fruits)
>>> ['Apple', 'Grape', 'Peach']
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾 Строки в JavaScript
В JavaScript любые текстовые данные являются строками. Не существует отдельного типа «символ», который есть в ряде других языков. Внутренний формат для строк — всё время UTF-16, вне зависимости от кодировки страницы.
Кавычки.
В JavaScript существуют различные типы кавычек.
Строку можно создать с помощью одинарных, двойных либо обратных кавычек:
let single = 'single-quoted';
let double = "double-quoted";
let backticks = `backticks`;
Одинарные и двойные кавычки работают одинаково, а если использовать обратные кавычки, то в такую строку мы сможем вставлять произвольные выражения, обернув их в ${…}:
let guestList = `Guests:
* John
* Pete
* Mary
`;
alert(guestList); // список гостей, состоящий из нескольких строк
📋 #Код
▬▬▬▬▬▬▬▬
// How To WebDev
В JavaScript любые текстовые данные являются строками. Не существует отдельного типа «символ», который есть в ряде других языков. Внутренний формат для строк — всё время UTF-16, вне зависимости от кодировки страницы.
Кавычки.
В JavaScript существуют различные типы кавычек.
Строку можно создать с помощью одинарных, двойных либо обратных кавычек:
let single = 'single-quoted';
let double = "double-quoted";
let backticks = `backticks`;
Одинарные и двойные кавычки работают одинаково, а если использовать обратные кавычки, то в такую строку мы сможем вставлять произвольные выражения, обернув их в ${…}:
let guestList = `Guests:
* John
* Pete
* Mary
`;
alert(guestList); // список гостей, состоящий из нескольких строк
📋 #Код
▬▬▬▬▬▬▬▬
// How To WebDev
🧾 Строки в JavaScript (часть 2)
В прошлый раз мы говорили о строках и кавычках в JavaScript. Теперь поговорим про спецсимволы.
Многострочные строки также можно создавать с помощью одинарных и двойных кавычек, используя так называемый «символ перевода строки», который записывается как \n:
let guestList = "Guests:\n * John\n * Pete\n * Mary";
alert(guestList); // список гостей, состоящий из нескольких строк
Эти две строки эквивалентны, просто записаны по-разному:
// перевод строки добавлен с помощью символа перевода строки
let str1 = "Hello\nWorld";
// многострочная строка, созданная с использованием обратных кавычек
let str2 =
alert(str1 == str2); // true
📋 #Код
▬▬▬▬▬▬▬▬
// How To WebDev
В прошлый раз мы говорили о строках и кавычках в JavaScript. Теперь поговорим про спецсимволы.
Многострочные строки также можно создавать с помощью одинарных и двойных кавычек, используя так называемый «символ перевода строки», который записывается как \n:
let guestList = "Guests:\n * John\n * Pete\n * Mary";
alert(guestList); // список гостей, состоящий из нескольких строк
Эти две строки эквивалентны, просто записаны по-разному:
// перевод строки добавлен с помощью символа перевода строки
let str1 = "Hello\nWorld";
// многострочная строка, созданная с использованием обратных кавычек
let str2 =
Hello
World;alert(str1 == str2); // true
📋 #Код
▬▬▬▬▬▬▬▬
// How To WebDev
🧾 Строки в JavaScript (финал)
Продолжение прошлой части про спецсимвовы. Сейчас мы рассмотрим другие, реже используемые спецсимволы:
\n – перевод строки.
\r – в текстовых файлах Windows для перевода строки используется комбинация символов \r\n, а на других ОС это просто \n.
\', \" – кавычки.
\\ – обратный слеш.
\t – знак табуляции.
\b, \f, \v – Backspace, Form Feed и Vertical Tab оставлены для обратной совместимости, на данный момент не используются.
\xXX – символ с шестнадцатеричным Юникодным кодом XX.
\uXXXX – символ в кодировке UTF-16 с шестнадцатеричным кодом XXXX.
\u{X…XXXXXX} (от 1 до 6 шестнадцатеричных цифр) – символ в кодировке UTF-32 с шестнадцатеричным кодом от U+0000 до U+10FFFF. Некоторые редкие символы кодируются двумя 16-битными словами и занимают 4 байта. Так можно вставлять символы с длинным кодом.
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Продолжение прошлой части про спецсимвовы. Сейчас мы рассмотрим другие, реже используемые спецсимволы:
\n – перевод строки.
\r – в текстовых файлах Windows для перевода строки используется комбинация символов \r\n, а на других ОС это просто \n.
\', \" – кавычки.
\\ – обратный слеш.
\t – знак табуляции.
\b, \f, \v – Backspace, Form Feed и Vertical Tab оставлены для обратной совместимости, на данный момент не используются.
\xXX – символ с шестнадцатеричным Юникодным кодом XX.
\uXXXX – символ в кодировке UTF-16 с шестнадцатеричным кодом XXXX.
\u{X…XXXXXX} (от 1 до 6 шестнадцатеричных цифр) – символ в кодировке UTF-32 с шестнадцатеричным кодом от U+0000 до U+10FFFF. Некоторые редкие символы кодируются двумя 16-битными словами и занимают 4 байта. Так можно вставлять символы с длинным кодом.
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾 Операция in в Python
С помощью in можно проверить наличие элемента в списке, строке и любой другой итерируемой переменной.
Приведём пример:
fruits = ['Apple', 'Grape', 'Peach', 'Banan', 'Orange']
if 'Apple' in fruits:
print('В списке есть элемент Apple')
>>> В списке есть элемент Apple
fruits = ['Apple', 'Grape', 'Peach', 'Banan', 'Orange']
if 'Lemon' in fruits:
print('В списке есть элемент Lemon')
else:'
print('В списке НЕТ элемента Lemon')
>>> В списке НЕТ элемента Lemon
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
С помощью in можно проверить наличие элемента в списке, строке и любой другой итерируемой переменной.
Приведём пример:
fruits = ['Apple', 'Grape', 'Peach', 'Banan', 'Orange']
if 'Apple' in fruits:
print('В списке есть элемент Apple')
>>> В списке есть элемент Apple
fruits = ['Apple', 'Grape', 'Peach', 'Banan', 'Orange']
if 'Lemon' in fruits:
print('В списке есть элемент Lemon')
else:'
print('В списке НЕТ элемента Lemon')
>>> В списке НЕТ элемента Lemon
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾 Метод append в Python
Данный метод добавляет элемент в конец списка:
# Создаем список, состоящий из четных чисел от 0 до 8 включительно
numbers = list(range(0,10,2))
# Добавляем число 200 в конец списка
numbers.append(200)
numbers.append(1)
numbers.append(2)
numbers.append(3)
print(numbers)
>>> [0, 2, 4, 6, 8, 200, 1, 2, 3]
Методу append можно передавать абсолютно любые значения:
all_types = [10, 3.14, 'Python', ['I', 'am', 'list']]
all_types.append(1024)
all_types.append('Hello world!')
all_types.append([1, 2, 3])
print(all_types)
>>> [10, 3.14, 'Python', ['I', 'am', 'list'], 1024, 'Hello world!', [1, 2, 3]]
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Данный метод добавляет элемент в конец списка:
# Создаем список, состоящий из четных чисел от 0 до 8 включительно
numbers = list(range(0,10,2))
# Добавляем число 200 в конец списка
numbers.append(200)
numbers.append(1)
numbers.append(2)
numbers.append(3)
print(numbers)
>>> [0, 2, 4, 6, 8, 200, 1, 2, 3]
Методу append можно передавать абсолютно любые значения:
all_types = [10, 3.14, 'Python', ['I', 'am', 'list']]
all_types.append(1024)
all_types.append('Hello world!')
all_types.append([1, 2, 3])
print(all_types)
>>> [10, 3.14, 'Python', ['I', 'am', 'list'], 1024, 'Hello world!', [1, 2, 3]]
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾 Метод insert в Python
Этот метод добавляет элемент в список на произвольную позицию. Insert принимает в качестве первого аргумента позицию, на которую нужно вставить элемент, а вторым — сам элемент.
Приведём пример:
# Создадим список чисел от 0 до 9
numbers = list(range(10))
# Добавление элемента 999 на позицию с индексом 0
numbers.insert(0, 999)
print(numbers) # первый print
numbers.insert(2, 1024)
print(numbers) # второй print
numbers.insert(5, 'Засланная строка-шпион')
print(numbers) # третий print
>>> [999, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # первый print
>>> [999, 0, 1024, 1, 2, 3, 4, 5, 6, 7, 8, 9] # второй print
>>> [999, 0, 1024, 1, 2, 'Засланная строка-шпион', 3, 4, 5, 6, 7, 8, 9] # третий print
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Этот метод добавляет элемент в список на произвольную позицию. Insert принимает в качестве первого аргумента позицию, на которую нужно вставить элемент, а вторым — сам элемент.
Приведём пример:
# Создадим список чисел от 0 до 9
numbers = list(range(10))
# Добавление элемента 999 на позицию с индексом 0
numbers.insert(0, 999)
print(numbers) # первый print
numbers.insert(2, 1024)
print(numbers) # второй print
numbers.insert(5, 'Засланная строка-шпион')
print(numbers) # третий print
>>> [999, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # первый print
>>> [999, 0, 1024, 1, 2, 3, 4, 5, 6, 7, 8, 9] # второй print
>>> [999, 0, 1024, 1, 2, 'Засланная строка-шпион', 3, 4, 5, 6, 7, 8, 9] # третий print
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾 Массивы в JavaScript
Javascript поддерживает два вида структуры "массив":
1. Ассоциативный массив (хеш), где данные хранятся по произвольному ключу.
2. Числовой массив Array, где данные хранятся по номерам.
Javascript - очень гибкий язык, поэтому технически в Array можно хранить произвольные ключи, как в Object. Но желательно использовать типы по назначению.
Для хранения данных по номеру предназначен тип Array. В типе Array есть специальные методы, ориентированные именно на работу с числовыми ключами.
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Javascript поддерживает два вида структуры "массив":
1. Ассоциативный массив (хеш), где данные хранятся по произвольному ключу.
2. Числовой массив Array, где данные хранятся по номерам.
Javascript - очень гибкий язык, поэтому технически в Array можно хранить произвольные ключи, как в Object. Но желательно использовать типы по назначению.
Для хранения данных по номеру предназначен тип Array. В типе Array есть специальные методы, ориентированные именно на работу с числовыми ключами.
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾 Создание и изменение массива в JavaScript
Есть два способа создания массива:
var a = new Array()
var a = []
Или же сразу со значениями:
var a = new Array("a", 1, true)
var a = ["a", 1, true]
Эти способы работают одинаково, кроме объявления вида new Array(10), когда у конструктора есть единственный аргумент-число.
Такое объявление создаст пустой массив (все элементы undefined) длиной 10. По возможности, не надо использовать new Array.
Отсчет элементов начинается с нуля:
alert(a[0]) // => "a"
Массив хранит данные по численным ключам, но внутри он использует точно такой же хэш (ту же структуру данных), как и обычный объект, поэтому можно сделать так:
var a = []
a[1] = 1
a[999999] = 2
И массив будет занимать память, нужную для хранения этих двух соответствий.
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Есть два способа создания массива:
var a = new Array()
var a = []
Или же сразу со значениями:
var a = new Array("a", 1, true)
var a = ["a", 1, true]
Эти способы работают одинаково, кроме объявления вида new Array(10), когда у конструктора есть единственный аргумент-число.
Такое объявление создаст пустой массив (все элементы undefined) длиной 10. По возможности, не надо использовать new Array.
Отсчет элементов начинается с нуля:
alert(a[0]) // => "a"
Массив хранит данные по численным ключам, но внутри он использует точно такой же хэш (ту же структуру данных), как и обычный объект, поэтому можно сделать так:
var a = []
a[1] = 1
a[999999] = 2
И массив будет занимать память, нужную для хранения этих двух соответствий.
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾 Методы pop/push, shift/unshift в JavaScript
Очередь – один из самых распространённых вариантов применения массива. В области компьютерных наук так называется упорядоченная коллекция элементов, поддерживающая два вида операций:
Push добавляет элемент в конец.
Shift удаляет элемент в начале, сдвигая очередь, так что второй элемент становится первым.
Массивы поддерживают обе операции. На практике необходимость в этом возникает очень часто. Например, очередь сообщений, которые надо показать на экране.
Существует и другой вариант применения для массивов – структура данных, называемая стек.
Она поддерживает два вида операций:
Push добавляет элемент в конец.
Pop удаляет последний элемент.
Таким образом, новые элементы всегда добавляются или удаляются из «конца». Массивы в JavaScript могут работать и как очередь, и как стек. Можно добавлять/удалять элементы как в начало, так и в конец массива.
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
Очередь – один из самых распространённых вариантов применения массива. В области компьютерных наук так называется упорядоченная коллекция элементов, поддерживающая два вида операций:
Push добавляет элемент в конец.
Shift удаляет элемент в начале, сдвигая очередь, так что второй элемент становится первым.
Массивы поддерживают обе операции. На практике необходимость в этом возникает очень часто. Например, очередь сообщений, которые надо показать на экране.
Существует и другой вариант применения для массивов – структура данных, называемая стек.
Она поддерживает два вида операций:
Push добавляет элемент в конец.
Pop удаляет последний элемент.
Таким образом, новые элементы всегда добавляются или удаляются из «конца». Массивы в JavaScript могут работать и как очередь, и как стек. Можно добавлять/удалять элементы как в начало, так и в конец массива.
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
🧾 Методы, работающие с концом массива
С концом массива работает метод pop и push. Он удаляет последний элемент из массива и возвращает его:
let fruits = ["Яблоко", "Апельсин", "Груша"];
alert( fruits.pop() ); // удаляем "Груша" и выводим его
alert( fruits ); // Яблоко, Апельсин
И fruits.pop() и fruits.at(-1) возвращают последний элемент массива, но fruits.pop() также изменяет массив, удаляя его.
Метод push добавляет элемент в конец массива:
let fruits = ["Яблоко", "Апельсин"];
fruits.push("Груша");
alert( fruits ); // Яблоко, Апельсин, Груша
Вызов fruits.push(...) равнозначен fruits[fruits.length] = ....
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev
С концом массива работает метод pop и push. Он удаляет последний элемент из массива и возвращает его:
let fruits = ["Яблоко", "Апельсин", "Груша"];
alert( fruits.pop() ); // удаляем "Груша" и выводим его
alert( fruits ); // Яблоко, Апельсин
И fruits.pop() и fruits.at(-1) возвращают последний элемент массива, но fruits.pop() также изменяет массив, удаляя его.
Метод push добавляет элемент в конец массива:
let fruits = ["Яблоко", "Апельсин"];
fruits.push("Груша");
alert( fruits ); // Яблоко, Апельсин, Груша
Вызов fruits.push(...) равнозначен fruits[fruits.length] = ....
📋 #Совет
▬▬▬▬▬▬▬▬
// How To WebDev