Сколько всего типов данных в javascript
Перейти к содержимому

Сколько всего типов данных в javascript

  • автор:

Типы данных, преобразование типов

В компьютерном мире есть только данные. Можно читать данные, изменять данные, создавать новые – но кроме данных ничего нет. Все данные хранятся как длинные последовательности бит, этим они сходны между собой.

В процессе работы компьютерные программы манипулируют значениями, такими как число 3,14 или текст «Hello World». Типы значений, которые могут бытпредставлены и обработаны в языке программирования, известны как типы данных, и одной из наиболее фундаментальных характеристик любого языка программирования является поддерживаемый им набор типов данных.

Типы данных в JavaScript можно разделить на три категории: простые(примитивы), объект с его подтипами, и ECMAScript specification types(EST).

2. Примитивы

К категории примитивов в языке JavaScript относятся:

2.1 Числа

В отличие от многих языков программирования, в JavaScript не делается различий между целыми и вещественными значениями. Все числа в JavaScript представляются вещественными значениями (с плавающей точкой). Для представления чисел в JavaScript используется 64-битный формат, определяемый стандартом IEEE 754.

Обратите внимание, что любому числовому литералу может предшествовать знак «минус» (-), делающий числа отрицательными. Однако фактически минус представляет собой унарный оператор смены знака, не являющийся частью синтаксиса числовых литералов.

2.1.1 Числовые литералы

В JavaScript есть 4 числовых литералов:

Двоичный литерал с целыми числами

Восьмеричный целочисленный литерал

Шестнадцатеричный целочисленный литерал

2.1.2 Специальные числа

В JavaScript есть три специальных значения, которые считаются числами, но ведут себя не как обычные числа.

  • Infinity
  • -Infinity
  • NaN
2.1.2 NaN

Если математическая операция не может быть совершена, то возвращается специальное значение NaN (Not-A-Number).

Например, деление 0/0 в математическом смысле неопределено, поэтому его результат NaN.

Значение NaN используется для обозначения математической ошибки и обладает следующими свойствами:

Значение NaN – единственное, в своем роде, которое не равно ничему, включая себя.

Значение NaN можно проверить специальной функцией isNaN(n), которая преобразует аргумент к числу и возвращает true.

Значение NaN «прилипчиво». Любая операция с NaN возвращает NaN.

Никакие математические операции в JavaScript не могут привести к ошибке или «обрушить» программу. В худшем случае, результат будет NaN.

2.1.3 Infinity

Infinity – особенное численное значение, которое ведет себя в точности как математическая бесконечность ∞.

2.1.4 Проверка на число

Глобальная isFinite() функция определяет, является ли переданное значение конечным числом. Если необходимо, параметр сначала преобразуется в число.

2.1.5 Методы объекта Number
<Number>.toPrecision()

Метод toPrecision() возвращает строку, представляющую объект Number с указанной точностью.

<Number>.toLocaleString()

Метод toLocaleString() возвращает строку с языко-зависимым представлением числа.

<Number>.toExponential

Метод toExponential() возвращает строку, представляющую объект Number в экспоненциальной записи.

<Number>.toFixed()

Метод toFixed() форматирует число, используя запись с фиксированной запятой.

2.2 Строки

Следующий базовый тип данных – строки. Строка – это неизменяемая, упорядоченная последовательность 16-битных значений, каждое из которых обычно представляет символ Юникода. Строки в JavaScript являются типом данных, используемым для представления текста. Длина строки – это количество 16-битных значений, содержащихся в ней. Нумерация символов в строках (и элементов в массивах) в языке JavaScript начинается с нуля: первое 16-битное значение находится в позиции 0, второе – в позиции 1 и т.д. Они используются для хранения текста. Записываются они в строковых литералах:

В ECMAScript 3 строковые литералы должны записываться в одной строке программы и не могут разбиваться на две строки. Однако в ECMAScript 5 строковые литералы можно разбивать на несколько строк, заканчивая каждую строку, кроме последней, символом обратного слэша (\). Ни один из символов обратного слэша, как и следующие за ними символы перевода строки, не будут включены в строковый литерал.

2.2.1 Экранирование символов

Если строка в одинарных кавычках, то внутренние одинарные кавычки внутри должны быть экранированы, то есть снабжены обратным слешем \’, вот так:

2.2.2 Экранирование символов

Строки могут содержать специальные символы. Самый часто используемый из таких символов – это «перевод строки».

Есть и более редкие символы, вот их список:

  • \b
  • \t
  • \n
  • \v
  • \f
  • \r
  • \\
  • \’
2.3 Логические значения

Логическое значение говорит об истинности или ложности чего-то. Логический тип данных имеет только два допустимых логических значения. Эти два значения представлены литералами true и false.

2.4 Cпециальный тип Null

В JavaScript null не является «ссылкой на несуществующий объект» или «нулевым указателем», как в некоторых других языках. Это просто специальное значение, которое имеет смысл «ничего» или «значение неизвестно».

2.5 Cпециальный тип undefined

В языке JavaScript имеется еще одно значение, свидетельствующее об отсутствии значения. Значение undefined, указывающее на полное отсутствие какого-либо значения. Оно возвращается при обращении к переменной, которой никогда не присваивалось значение, а также к несуществующему свойству объекта или элементу массива. Кроме того, значение undefined возвращается функциями, не имеющими возвращаемого значения, и присваивается параметрам функций для аргументов, которые не были переданы при вызове.

Идентификатор undefined является именем предопределенной глобальной переменной (а не ключевым словом, как null), которая инициализирована значением undefined. В ECMAScript 3 undefined является переменной, доступной для чтения/записи, которой можно присвоить любое другое значение. Эта проблема была исправлена в ECMAScript 5, и в реализациях JavaScript, соответствующих этому стандарту, переменная undefined доступна только для чтения.

Значение undefined можно рассматривать как признак неожиданного или ошибоч ного отсутствия какого-либо значения, а null – как признак обычного или вполне ожидаемого отсутствия значения. Если в программе потребуется присвоить одно из этих значений переменной или свойству или передать одно из этих значений функции, практически всегда предпочтительнее использовать значение null.

2.6 Cпециальный тип Symbol

Символы – новый примитивный тип, предназначенный для уникальных идентификаторов.

Основная область использования символов – это системные свойства объектов, которые задают разные аспекты их поведения. Поддержка у них пока небольшая, но она растёт. Системные символы позволяют разработчикам стандарта добавлять новые «особые» свойства объектов, при этом не резервируя соответствующие строковые значения.

3. Оператор typeof

Унарный оператор typeof помещается перед единственным операндом, который может иметь любой тип. Его значением является строка, указывающая на тип данных операнда.

У оператор typeof есть два синтаксиса: со скобками и без:

Работают они одинаково, но первый синтаксис короче.

4. Объектный тип данных

Объекты в языке JavaScript являются составными значениями(структурами): они представляют собой коллекции свойств, или именованных значений.

Объявляются объекты при помощи объектного литерала <>:

Свойство объекта так же также называют полем объекта. Поле объекта может хранить любой тип данных, включая функции, у таких свойст есть специальное название — метод.

Задать поле объекта можна через синтаксис ключ-значение внутри литерала объекта.

А получить доступ к полю можна с помощью такого синтаксиса:

5. Иммутабельность примитивов и ссылочность объектного типа

Между простыми значениями (undefined, null, boolean, числами, строками, символами) и объектами (включая массивы и функции) в языке JavaScript имеются фундаментальные отличия. Простые значения являются неизменяемыми (иммутабельными).

Простое значение невозможно изменить (трансформировать/модифицировать). Это очевидно для чисел и логических значений – нет никакого смысла изменять значение числа. Однако для строк это менее очевидно. Поскольку строки являются массивами символов, вполне естественно было бы ожидать наличие возможности изменять символы в той или иной позиции в строке. В действительности JavaScript не позволяет сделать это, и все строковые методы, которые, на первый взгляд, возвращают измененную строку, на самом деле возвращают новое строковое значение Например:

Кроме того, величины простых типов сравниваются по значению: две величины считаются одинаковыми, если они имеют одно и то же значение. Для чисел, логических значений, null и undefined это выглядит очевидным: нет никакого другого способа сравнить их. Однако для строк это утверждение не выглядит таким очевидным. При сравнении двух строковых значений JavaScript считает их одинаковыми тогда и только тогда, когда они имеют одинаковую длину и содержат одинаковые символы в соответствующих позициях.

Объекты отличаются от простых типов. Во-первых, они являются изменяемы­ми – их значения можно изменять:

Объекты не сравниваются по значению: два объекта не считаются равными, даже если они будут иметь одинаковые наборы свойств с одинаковыми значениями. И два массива не считаются равными, даже если они имеют один и тот же набор элементов, следующих в том же порядке:

Чтобы подчеркнуть отличие от простых типов JavaScript, объекты иногда называют ссылочными типами. Если следовать этой терминологии, значениями объектов являются ссылки, и можно сказать, что объекты сравниваются по ссылке: значения двух объектов считаются равными тогда и только тогда, когда они ссы­лаются на один и тот же объект в памяти.

Если в программе потребуется создать новую копию объекта или массива, необходимо будет явно скопировать свойства объекта или элементы массива.

Болие детально особенности объектного типа мы рассмотрим в последующих главах курса.

*. Упражнения

1. User

Создайте пустой объект user. Добавьте свойство name со значением Вася. Добавьте свойство surname со значением Петров. Поменяйте значение name на Сергей. Удалите свойство name из объекта.

Типы данных

Значение в JavaScript всегда относится к данным определённого типа. Например, это может быть строка или число.

Есть восемь основных типов данных в JavaScript. В этой главе мы рассмотрим их в общем, а в следующих главах поговорим подробнее о каждом.

Переменная в JavaScript может содержать любые данные. В один момент там может быть строка, а в другой – число:

Языки программирования, в которых такое возможно, называются «динамически типизированными». Это значит, что типы данных есть, но переменные не привязаны ни к одному из них.

Число

Числовой тип данных ( number ) представляет как целочисленные значения, так и числа с плавающей точкой.

Существует множество операций для чисел, например, умножение * , деление / , сложение + , вычитание — и так далее.

Кроме обычных чисел, существуют так называемые «специальные числовые значения», которые относятся к этому типу данных: Infinity , -Infinity и NaN .

Infinity представляет собой математическую бесконечность ∞. Это особое значение, которое больше любого числа.

Мы можем получить его в результате деления на ноль:

Или задать его явно:

NaN означает вычислительную ошибку. Это результат неправильной или неопределённой математической операции, например:

Значение NaN «прилипчиво». Любая математическая операция с NaN возвращает NaN :

Если где-то в математическом выражении есть NaN , то оно распространяется на весь результат (есть только одно исключение: NaN ** 0 равно 1 ).

Математические операции в JavaScript «безопасны». Мы можем делать что угодно: делить на ноль, обращаться с нечисловыми строками как с числами и т.д.

Скрипт никогда не остановится с фатальной ошибкой (не «умрёт»). В худшем случае мы получим NaN как результат выполнения.

Специальные числовые значения относятся к типу «число». Конечно, это не числа в привычном значении этого слова.

Подробнее о работе с числами мы поговорим в главе Числа.

BigInt

В JavaScript тип number не может безопасно работать с числами, большими, чем (2 53 -1) (т. е. 9007199254740991 ) или меньшими, чем -(2 53 -1) для отрицательных чисел. Технически, тип number может хранить и гораздо большие значения (вплоть до 1.7976931348623157 * 10 308 ), однако за пределами безопасного диапазона ±(2 53 -1) многие из чисел не могут быть представлены с помощью этого типа данных из-за ограничений, вызванных внутренним представлением чисел в двоичной форме. Например, нечётные числа, большие, чем (2 53 -1) , невозможно хранить при помощи типа number , они с разной точностью будут автоматически округляться до чётных значений. В то же время некоторые чётные числа, большие, чем (2 53 -1) , при помощи типа number хранить технически возможно (однако не стоит этого делать во избежание дальнейших ошибок).

Для большинства случаев достаточно безопасного диапазона чисел от -(2 53 -1) до (2 53 -1) . Но иногда нам нужен диапазон действительно гигантских целых чисел без каких-либо ограничений или пропущенных значений внутри него. Например, в криптографии или при использовании метки времени («timestamp») с микросекундами.

Тип BigInt был добавлен в JavaScript, чтобы дать возможность работать с целыми числами произвольной длины.

Чтобы создать значение типа BigInt , необходимо добавить n в конец числового литерала:

Так как BigInt -числа нужны достаточно редко, мы рассмотрим их в отдельной главе BigInt. Ознакомьтесь с ней, когда вам понадобятся настолько большие числа.

В данный момент BigInt поддерживается только в браузерах Firefox, Chrome, Edge и Safari, но не поддерживается в IE.

Строка

Строка ( string ) в JavaScript должна быть заключена в кавычки.

В JavaScript существует три типа кавычек.

  1. Двойные кавычки: "Привет" .
  2. Одинарные кавычки: ‘Привет’ .
  3. Обратные кавычки: `Привет` .

Двойные или одинарные кавычки являются «простыми», между ними нет разницы в JavaScript.

Обратные же кавычки имеют расширенную функциональность. Они позволяют нам встраивать выражения в строку, заключая их в $ <…>. Например:

Выражение внутри $ <…>вычисляется, и его результат становится частью строки. Мы можем положить туда всё, что угодно: переменную name , или выражение 1 + 2 , или что-то более сложное.

Обратите внимание, что это можно делать только в обратных кавычках. Другие кавычки не имеют такой функциональности встраивания!

Мы рассмотрим строки более подробно в главе Строки.

В некоторых языках, например C и Java, для хранения одного символа, например "a" или "%" , существует отдельный тип. В языках C и Java это char .

В JavaScript подобного типа нет, есть только тип string . Строка может содержать ноль символов (быть пустой), один символ или множество.

Булевый (логический) тип

Булевый тип ( boolean ) может принимать только два значения: true (истина) и false (ложь).

Такой тип, как правило, используется для хранения значений да/нет: true значит «да, правильно», а false значит «нет, не правильно».

JavaScript Data Types

To be able to operate on variables, it is important to know something about the type.

Without data types, a computer cannot safely solve this:

Does it make any sense to add "Volvo" to sixteen? Will it produce an error or will it produce a result?

JavaScript will treat the example above as:

When adding a number and a string, JavaScript will treat the number as a string.

Example

Example

JavaScript evaluates expressions from left to right. Different sequences can produce different results:

JavaScript:

JavaScript:

In the first example, JavaScript treats 16 and 4 as numbers, until it reaches "Volvo".

In the second example, since the first operand is a string, all operands are treated as strings.

JavaScript Types are Dynamic

JavaScript has dynamic types. This means that the same variable can be used to hold different data types:

Example

JavaScript Strings

A string (or a text string) is a series of characters like "John Doe".

Strings are written with quotes. You can use single or double quotes:

Example

// Using double quotes:
let carName1 = "Volvo XC60";

// Using single quotes:
let carName2 = ‘Volvo XC60’;

You can use quotes inside a string, as long as they don’t match the quotes surrounding the string:

Example

// Single quote inside double quotes:
let answer1 = "It’s alright";

// Single quotes inside double quotes:
let answer2 = «He is called ‘Johnny'»;

// Double quotes inside single quotes:
let answer3 = ‘He is called «Johnny»‘;

You will learn more about strings later in this tutorial.

JavaScript Numbers

All JavaScript numbers are stored as decimal numbers (floating point).

Numbers can be written with, or without decimals:

Example

// With decimals:
let x1 = 34.00;

// Without decimals:
let x2 = 34;

Exponential Notation

Extra large or extra small numbers can be written with scientific (exponential) notation:

Example

Most programming languages have many number types:

Whole numbers (integers):
byte (8-bit), short (16-bit), int (32-bit), long (64-bit)

Real numbers (floating-point):
float (32-bit), double (64-bit).

Javascript numbers are always one type:
double (64-bit floating point).

You will learn more about numbers later in this tutorial.

JavaScript BigInt

All JavaScript numbers are stored in a a 64-bit floating-point format.

JavaScript BigInt is a new datatype (ES2020) that can be used to store integer values that are too big to be represented by a normal JavaScript Number.

Example

You will learn more about BigInt later in this tutorial.

JavaScript Booleans

Booleans can only have two values: true or false .

Example

Booleans are often used in conditional testing.

You will learn more about booleans later in this tutorial.

JavaScript Arrays

JavaScript arrays are written with square brackets.

Array items are separated by commas.

The following code declares (creates) an array called cars , containing three items (car names):

Example

Array indexes are zero-based, which means the first item is [0], second is [1], and so on.

You will learn more about arrays later in this tutorial.

JavaScript Objects

JavaScript objects are written with curly braces <> .

Object properties are written as name:value pairs, separated by commas.

Example

The object (person) in the example above has 4 properties: firstName, lastName, age, and eyeColor.

You will learn more about objects later in this tutorial.

The typeof Operator

You can use the JavaScript typeof operator to find the type of a JavaScript variable.

The typeof operator returns the type of a variable or an expression:

Example

Example

You will learn more about typeof later in this tutorial.

Undefined

In JavaScript, a variable without a value, has the value undefined . The type is also undefined .

Example

Any variable can be emptied, by setting the value to undefined . The type will also be undefined .

Типы данных JavaScript и структуры данных

Все языки программирования содержат встроенные типы данных, но они часто отличаются друг от друга в разных языках. Эта статья — попытка описать встроенные структуры (типы) данных, доступные в JavaScript, и их свойства. На их основе строятся другие структуры данных. Когда это возможно, то мы будем сравнивать типы данных в разных языках.

Динамическая типизация

JavaScript является слабо типизированным или динамическим языком. Это значит, что вам не нужно определять тип переменной заранее. Тип определится автоматически во время выполнения программы. Также это значит, что вы можете использовать одну переменную для хранения данных различных типов:

Типы данных

Стандарт ECMAScript определяет 8 типов:

    6 типов данных являющихся примитивами:

      (Неопределённый тип) : typeof instance === «undefined» (Булев, Логический тип) : typeof instance === «boolean» (Число) : typeof instance === «number» (Строка) : typeof instance === «string» : typeof instance === «bigint» (в ECMAScript 6) : typeof instance === «symbol»

    И здесь нам необходимо сделать предостережение относительно использования оператора typeof для определения типа структур, т.к. все структуры будут возвращать «object» при его использовании, так как назначение typeof — проверка типа данных, но не структур. Если проверить тип структуры всё же необходимо, то в этом случае желательно использовать оператор instanceof, так как именно он отвечает на вопрос о том, какой конструктор был использован для создания структуры.

    Стоит отметить два особых случая работы оператора typeof : возврат «object» для значения null и «function» для функций: первое принято считать ошибкой языка, сохраненной ради обратной совместимости, второе является условностью, удобной для проверки на принадлежность значения категории функций, где функция — это особый, «вызываемый», объект.

    Примитивные значения

    Все типы данных в JavaScript, кроме объектов, являются иммутабельными (значения не могут быть модифицированы, а только перезаписаны новым полным значением). Например, в отличии от C, где строку можно посимвольно корректировать, в JavaScript строки пересоздаются только полностью. Значения таких типов называются «примитивными значениями».

    Булевый тип данных

    Булевый тип представляет логическую сущность и имеет два значения: true (истина) и false (ложь) . Смотрите Boolean и Boolean для получения подробностей.

    Этот тип данных имеет всего одно значение: null . Смотрите null и Null для получения подробностей.

    Undefined

    Переменная, которой не было присвоено значение, будет иметь значение undefined . Смотрите undefined и undefined для получения подробностей.

    Числа

    В соответствии со стандартом ECMAScript, существует только один числовой тип, который представляет собой 64-битное число двойной точности согласно стандарту IEEE 754. Другими словами, специального типа для целых чисел в JavaScript нет. Это означает, что при числовых операциях вы можете получить неточное (округлённое) значение. В дополнение к возможности представлять числа с плавающей запятой, есть несколько символических значений: +Infinity (положительная бесконечность), -Infinity (отрицательная бесконечность), и NaN (не число).

    Для получения самого большого или самого меньшего доступного значения в пределах +/-Infinity , можно использовать константы Number.MAX_VALUE или Number.MIN_VALUE . А начиная с ECMAScript 2015, вы также можете проверить, находится ли число в безопасном для целых чисел диапазоне, используя метод Number.isSafeInteger() , либо константы Number.MAX_SAFE_INTEGER и Number.MIN_SAFE_INTEGER . За пределами этого диапазона операции с целыми числами будут небезопасными, и возвращать приближённые значения.

    Ноль в JavaScript имеет два представления: -0 и +0. («0» это синоним +0). На практике это имеет малозаметный эффект. Например, выражение +0 === -0 является истинным. Однако, это может проявиться при делении на ноль:

    Хотя число в большинстве случаев представляет только своё значение, JavaScript предоставляет несколько бинарных операций. Они могут использоваться для того, чтобы представлять число как несколько булевых значений, с помощью битовой маски. Это считается плохой практикой, так как JavaScript предлагает другие способы представления булевых значений (например, массив элементов с булевыми значениями или объект, содержащий набор булевых свойств). Кроме того, битовые маски часто делают код более трудным для чтения, понимания и дальнейшей поддержки. Эта техника может быть необходима в условиях технических ограничений, таких как объём локального хранилища данных, или в такой экстремальной ситуации, когда каждый бит передаваемый по сети на счету. Данный подход следует использовать как крайнюю меру, когда не остаётся других путей для необходимой оптимизации.

    Текстовые строки

    В JavaScript для представления текстовых данных служит тип String . Он представляет собой цепочку «элементов» 16-битных беззнаковых целочисленных значений. Каждый такой элемент занимает свою позицию в строке. Первый элемент имеет индекс 0, следующий — 1, и так далее. Длина строки — это количество элементов в ней.

    В отличие от языков подобных C, строки в JavaScript являются иммутабельными. Это означает, что после того, как строковое значение создано, его нельзя модифицировать. Остаётся лишь создать новую строку путём совершения некой операции над исходной строкой. Например:

    • Получить часть исходной строки выборкой отдельных символов, либо применением метода String.substr() .
    • Объединить две строки в одну, применив оператор ( + ) или метод String.concat() .
    Избегайте повсеместного использования строк в своём коде!

    Иногда может показаться соблазнительным использование строк для представления сложных структур данных. Это даст небольшие краткосрочные выгоды:

    • Легко соединять данные в кучу сложением строк.
    • Легко отлаживать (данные выглядят «как есть», в читаемом текстовом виде).
    • Строки — это распространённый формат данных, используемый разнообразными API (поля ввода, значения локального хранилища, XMLHttpRequest возвращает ответ в виде строки, и т. д.) и использовать только строки может показаться заманчивым.

    Несмотря на то, что в строке можно выразить данные любой сложности, делать это — не самая лучшая идея. Например, используя разделитель, строку можно использовать как список элементов (массив JavaScript будет более подходящим решением). К сожалению, если такой сепаратор встретится в значении одного из элементов, такой список будет сломан. Выходом может стать добавление символа экранирования, и т. д. Всё это потребует добавления множества ненужных правил, и станет обременительным при поддержке.

    Используйте строки только для текстовых данных. Для составных структур преобразуйте строки в подобающие конструкции.

    Тип данных Символ (Symbol)

    Символы являются нововведением JavaScript начиная с ECMAScript 2015. Символ — это уникальное и иммутабельное примитивное значение, которое может быть использовано как ключ для свойства объекта (смотрите ниже). В некоторых языках программирования символы называются атомами. Их также можно сравнить с именованными значениями перечисления (enum) в языке C. Подробнее смотрите Symbol и Symbol .

    Тип данных Большое целое (BigInt)

    BigInt является встроенным объектом, который предоставляет способ представления целых чисел, которые больше 2 53, что является наибольшим числом, которое JavaScript может надёжно представить с помощью Number примитива.

    Объекты

    В компьютерной терминологии, объект — это значение в памяти, на которое возможно сослаться с помощью идентификатора.

    Свойства

    В JavaScript объект может расцениваться как набор свойств. Литеральная инициализация объекта задаёт определённое количество начальных свойств, и в процессе работы приложения поля могут добавляться и удаляться. Значения свойств могут иметь любой тип, включая другие объекты, что позволяет строить сложные, разветвлённые иерархии данных. Каждое свойство объекта идентифицируется ключом, в качестве которого может выступать значение с типом Строка или Символ.

    Есть два типа свойств: свойство-значение и свойство-акцессор (свойство, обёрнутое в геттер и сеттер). Они отличаются определёнными атрибутами.

    Свойство-значение

    Ассоциирует ключ со значением, и имеет следующие атрибуты:

    Атрибут Тип Описание Значение по умолчанию
    [[Value]] Любой тип JavaScript Значение, возвращаемое при обращении к свойству. undefined
    [[Writable]] Boolean Если false , то [[Value]] свойства не может быть изменено. false
    [[Enumerable]] Boolean Если true , свойство будет перечислено в цикле for. in. Смотрите подробнее Перечисляемость и владение свойствами. false
    [[Configurable]] Boolean Если false , то свойство не может быть удалено, а его атрибуты, кроме [[Value]] и [[Writable]] не могут быть изменены. false
    Атрибут Тип Описание
    Read-only Boolean Зарезервировано по атрибуту [[Writable]] ES5.
    DontEnum Boolean Зарезервировано по атрибуту [[Enumerable]] ES5.
    DontDelete Boolean Зарезервировано по атрибуту [[Configurable]] ES5.
    Свойство-акцессор

    Ассоциирует ключ с одной из двух функций-акцессоров (геттер и сеттер) для получения или изменения значения свойства, и имеет следующий атрибуты:

    Атрибут Тип Описание Значение по умолчанию
    [[Get]] Function или undefined Функция вызывается без параметров и возвращает значение свойства каждый раз, когда происходит чтение свойства. Смотрите также get (en-US) . undefined
    [[Set]] Function или undefined Функция вызывается с одним аргументом, содержащим присваиваемое значение, каждый раз, когда происходит попытка присвоить свойству новое значение. Смотрите также set (en-US) . undefined
    [[Enumerable]] Boolean Если true , свойство будет перечислено в цикле for. in. false
    [[Configurable]] Boolean Если false , то свойство не может быть удалено, и не может быть преобразовано в свойство-значение. false

    Примечание: Атрибуты обычно используются движком JavaScript, поэтому вы не можете обратиться к ним напрямую (смотрите подробнее Object.defineProperty()). Вот почему в таблицах выше они помещены в двойные квадратные скобки вместо одиночных.

    «Обычные» объекты и функции

    Объект JavaScript — это таблица соотношений между ключами и значениями. Ключи — это строки (или Symbol ), а значения могут быть любыми. Это делает объекты полностью отвечающими определению хеш-таблицы.

    Функции — это обычные объекты, имеющие дополнительную возможность быть вызванными для исполнения.

    Для работы с датами служит встроенный глобальный объект Date .

    Массивы общие и типизированные

    Массив — это обычный объект с дополнительной связью между целочисленными ключами его свойств и специальным свойством length. Вдобавок ко всему, массивы наследуют Array.prototype , предоставляющий исчерпывающий набор методов для манипуляции массивами. Например, метод indexOf (служит для поиска значения в массиве), push (en-US) (добавляет элемент в конец массива) и т. д. Всё это делает массив идеальным кандидатом для представления списков и перечислений.

    Типизированный массив является новинкой ECMAScript Edition 6 и является массивоподобным представлением для лежащего в его основе бинарного буфера памяти. Следующая таблица поможет вам найти соответствующие типы языка C:

    Объекты TypedArray
    Тип Диапазон значений Размер (байты) Описание Тип Web IDL Эквивалентный тип языка C
    Int8Array -128 до 127 1 8-битное целое со знаком с дополнением до двух byte int8_t
    Uint8Array 0 до 255 1 8-битное беззнаковое целое octet uint8_t
    Uint8ClampedArray 0 до 255 1 8-битное беззнаковое целое (фиксированное от 0 до 255) octet uint8_t
    Int16Array -32768 до 32767 2 16-битное целое со знаком с дополнением до двух short int16_t
    Uint16Array 0 до 65535 2 16-битное беззнаковое целое unsigned short uint16_t
    Int32Array -2147483648 до 2147483647 4 32-битное целое со знаком с дополнением до двух long int32_t
    Uint32Array 0 до 4294967295 4 32-битное беззнаковое целое unsigned long uint32_t
    Float32Array 1.2×10-38 to 3.4×1038 4 32-битное число с плавающей точкой IEEE-стандарта (7 значащих цифр, например 1.123456) unrestricted float float
    Float64Array 5.0×10-324 to 1.8×10308 8 64-битное число с плавающей точкой IEEE-стандарта (16 значащих цифр, например, 1.123. 15) unrestricted double double

    Коллекции: Maps, Sets, WeakMaps, WeakSets

    Эти наборы данных используют ссылку на объект в качестве ключа, и введены в JavaScript с приходом ECMAScript Edition 6. Set и WeakSet являют собой набор уникальных объектов, в то время как Map (en-US) и WeakMap ассоциируют с объектом (выступающим в качестве ключа) некоторое значение. Разница между Map и WeakMap заключается в том, что только у Map ключи являются перечисляемыми. Это позволяет оптимизировать сборку мусора для WeakMap.

    Можно было бы написать собственную реализацию Map и Set на чистом ECMAScript 5. Однако, так как объекты нельзя сравнивать на больше или меньше, то производительность поиска в самодельной реализации будет вынужденно линейной. Нативная реализация (включая WeakMap) имеет производительность логарифмически близкую к константе.

    Обычно, для привязки некоторых данных к узлу DOM, приходится устанавливать свойства этому узлу непосредственно, либо использовать его атрибуты data-* . Обратной стороной такого подхода является то, что эти данные будут доступны любому скрипту, работающему в том же контексте. Maps и WeakMaps дают возможность приватной привязки данных к объекту.

    Структурированные данные: JSON

    JSON (JavaScript Object Notation) — это легковесный формат обмена данными, происходящий от JavaScript, но используемый во множестве языков программирования. JSON строит универсальные структуры данных. Смотрите JSON и JSON для детального изучения.

    Больше объектов и стандартная библиотека

    JavaScript имеет стандартную библиотеку встроенных объектов. Пожалуйста, обратитесь к справочнику, чтобы найти описание всех объектов доступных для работы.

    Определение типов оператором typeof

    Оператор typeof может помочь определить тип вашей переменной. Смотрите страницу документации, где приведены его детали и случаи использования.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *