JavaScript - Объект TypedArray
Здравствуйте, будущие суперзвезды кодирования! ? Сегодня мы отправимся в увлекательное путешествие в мир typedarrays в JavaScript. Не волнуйтесь, если вы новички в программировании - я буду вашим дружелюбным проводником, и мы будем идти шаг за шагом. Так что возьмите любимый напиток, устройтесь поудобнее и погружайтесь с нами!
Что такое TypedArray?
Представьте, что вы организовываете كبير聚会 (ведь кто не любит خوب聚会, правильно?). Вам нужно следить за количеством чашек, тарелок и столовых приборов. Это sorta что делает typedarray в JavaScript - он помогает нам организовать и хранить определенные типы данных эффективно.
TypedArray - это особый вид массива в JavaScript, который может содержать только числа определенного типа. Это как если бы у вас были отдельные коробки для вилок, ложек и ножей вместо того, чтобы складывать их все в один большой ящик.
// Создание typedarray из 8-битных целых чисел
const myArray = new Int8Array(5);
console.log(myArray); // Вывод: Int8Array(5) [0, 0, 0, 0, 0]
В этом примере мы создали typedarray, который может содержать пять 8-битных целых чисел. Это как если бы мы установили пять маленьких коробок, каждая из которых может содержать число от -128 до 127.
Why TypedArray?
Вы можете задаться вопросом: "Зачем заморачиваться с typedarrays, если у нас есть обычные массивы?" Отличный вопрос! TypedArrays имеют некоторые superpowers, которые делают их идеальными для определенных ситуаций:
- Скорость: Они быстрее для числовых операций.
- Эффективность памяти: Они используют фиксированное количество памяти.
- Совместимость: Они хорошо работают с двоичными данными и другими языками.
Это как использовать специализированный инструмент вместо швейцарского армейского ножа - иногда вам нужно идеальное соответствие!
Объекты TypedArray
JavaScript предлагает различные типы typedarrays, каждый из которых предназначен для разных типов чисел и размеров. Давайте посмотрим на них в удобной таблице:
TypedArray | Описание | Диапазон |
---|---|---|
Int8Array | 8-битное знаковое целое число | -128 до 127 |
Uint8Array | 8-битное беззнаковое целое число | 0 до 255 |
Int16Array | 16-битное знаковое целое число | -32,768 до 32,767 |
Uint16Array | 16-битное беззнаковое целое число | 0 до 65,535 |
Int32Array | 32-битное знаковое целое число | -2,147,483,648 до 2,147,483,647 |
Uint32Array | 32-битное беззнаковое целое число | 0 до 4,294,967,295 |
Float32Array | 32-битное浮点ное число | ~1.2E-38 до ~3.4E+38 |
Float64Array | 64-битное浮点ное число | ~5.0E-324 до ~1.8E+308 |
Вау, это quite a list! Не волнуйтесь, если это seems overwhelming - мы будем использовать примеры, чтобы все стало ясным.
Свойства TypedArray
TypedArrays имеют некоторые удобные свойства. Давайте их рассмотрим:
1. length
Это告诉我们, сколько элементов в нашем typedarray.
const myArray = new Int16Array(3);
console.log(myArray.length); // Вывод: 3
2. BYTES_PER_ELEMENT
Это свойство告诉我们, сколько байтов занимает каждый элемент в массиве.
console.log(Int8Array.BYTES_PER_ELEMENT); // Вывод: 1
console.log(Int16Array.BYTES_PER_ELEMENT); // Вывод: 2
Это как знать, сколько места занимает каждая коробка в нашей системе хранения!
Статические методы TypedArray
TypedArrays имеют некоторые встроенные методы, которые мы можем использовать без создания экземпляра. Давайте рассмотрим несколько из них:
1. TypedArray.from()
Этот метод создает новый typedarray из массивоподобного объекта.
const regularArray = [1, 2, 3, 4];
const typedArray = Int8Array.from(regularArray);
console.log(typedArray); // Вывод: Int8Array(4) [1, 2, 3, 4]
Это как convert是我们的mixed utensil drawer в аккуратно организованные коробки!
2. TypedArray.of()
Этот метод создает новый typedarray с переменным количеством аргументов.
const myArray = Int16Array.of(1, 2, 3, 4, 5);
console.log(myArray); // Вывод: Int16Array(5) [1, 2, 3, 4, 5]
Это как decir, "Вот элементы, пожалуйста, организуйте их для меня!"
Методы экземпляра TypedArray
Теперь давайте рассмотрим некоторые методы, которые мы можем использовать на наших экземплярах typedarray:
1. set()
Этот метод позволяет нам копировать значения в наш typedarray.
const myArray = new Int8Array(5);
myArray.set([1, 2, 3]);
console.log(myArray); // Вывод: Int8Array(5) [1, 2, 3, 0, 0]
Это как putting items в наши организованные коробки.
2. subarray()
Этот метод возвращает новый typedarray, который является частью исходного.
const originalArray = new Int8Array([1, 2, 3, 4, 5]);
const subArray = originalArray.subarray(1, 4);
console.log(subArray); // Вывод: Int8Array(3) [2, 3, 4]
Это как taking несколько коробок из нашей системы хранения для specific task.
Примеры
Давайте объединим все наши знания с помощью некоторых prakticheskikh примеров!
Пример 1: Создание и изменение typedarray
// Создание typedarray из 8-битных беззнаковых целых чисел
const pixelData = new Uint8Array(4);
// Установка RGB значений для пикселя (Красный: 255, Зеленый: 128, Синий: 64, Альфа: 255)
pixelData[0] = 255; // Красный
pixelData[1] = 128; // Зеленый
pixelData[2] = 64; // Синий
pixelData[3] = 255; // Альфа (полностью непрозрачный)
console.log(pixelData); // Вывод: Uint8Array(4) [255, 128, 64, 255]
В этом примере мы используем Uint8Array для представления цветовых значений пикселя. Каждое значение находится в диапазоне от 0 до 255, что идеально для 8-битных беззнаковых целых чисел!
Пример 2: Использование typedarrays для производительности
const size = 1000000;
// Использование обычного массива
console.time('Regular Array');
const regularArray = new Array(size);
for (let i = 0; i < size; i++) {
regularArray[i] = i;
}
console.timeEnd('Regular Array');
// Использование TypedArray
console.time('TypedArray');
const typedArray = new Int32Array(size);
for (let i = 0; i < size; i++) {
typedArray[i] = i;
}
console.timeEnd('TypedArray');
Запустите этот код, и вы, вероятно, увидите, что typedarray быстрее! Это как having a well-organized storage system versus throwing everything into a big pile.
И вот мы и arrived, folks! Мы отправились в путешествие по land of TypedArrays, от понимания, что они такое, до их использования в действии. Помните, что практика makes perfect, так что не бойтесь экспериментировать с этими концепциями.
Before you know it, вы будете TypedArray wizards, оптимизируя ваш код и впечатляя своих коллег-разработчиков. Until next time, happy coding! ?????
Credits: Image by storyset