JavaScript поддерживает еще несколько операторов, которые описываются в этом уроке: typeof, delete, void, «запятая», операторы доступа к массивам []
и объектам (.)
.
Оператор typeof
Оператор typeof — это унарный оператор, который записывается перед своим единственным операндом любого типа и возвращает строковое значение, содержащее тип операнда.
Следующая таблица определяет значения оператора typeof для всех значений, возможных в языке JavaScript:
Значение x | typeof x |
---|---|
undefined null true или false любое число, Infinity или NaN любая строка, "" любая функция, function() {} любой объект или массив, {}|[] любой символ, SymЬol() |
"undefined" "object" "boolean" "number" "string" "function" "object" "symbol" |
Операнд оператора typeof может быть записан в двух формах – в скобках () и без скобок:
Примечание: Операнд typeof можно заключить в скобки (), благодаря чему ключевое слово typeof выглядит как имя функции, а не как ключевое слово или оператор: typeof(x). Последнее – вполне допустимый синтаксис, впрочем необязательные круглые скобки лишь создают ненужную группу выражений.
У оператора typeof есть одна особенность, которую обычно называют ошибкой: typeof null возвращает "object". Тем не менее, это технически правильное значение, потому что специальное значение null считается ссылкой на пустой объект.
На заметку: Несмотря на то, что функции в JavaScript являются разновидностью объектов, а не отдельным типом данных, оператор typeof выделяет функции отдельно, возвращая для них "function". На практике эта особенность позволяет легко определить функцию, что обычно весьма удобно.
Оператор void
Оператор void – это унарный оператор, записываемый перед единственным операндом любого типа. У void есть только одна задача: вычислить свой операнд, а затем возвратить undefined.Чаще всего оператор void применяется на стороне клиента в URL-адресе с признаком псевдопротокола javascript:, где он позволяет вычислять выражение ради его побочных действий, не отображая в браузере вычисленное значение:
Это не рекомендуемый подход, но время от времени он встречается в HTML-документах.
Оператор «запятая» (,)
Оператор «запятая» (,) выполняет оба операнда (слева направо) и возвращает значение второго оператора. Левый операнд вычисляется всегда и перед вычислением правого операнда учитываются все побочные эффекты.
Это означает, что значение выражения, находящегося с правой стороны, станет значением разделенного запятыми выражения. Например:
Скобки необходимы, поскольку оператор «запятая» имеет более низкий приоритет по сравнению с оператором присваивания. В выражении a = (7, 5) для задания приоритета использованы скобки, иначе оператор присваивания (=)
выполнился бы до запятой (,)
, получилось бы a=7, а не 5.
На заметку: Заметьте, что запятая при объявлении переменных с помощью ключевого слова var – это не оператор «запятая», так как в данном случае она находиться не в выражении. Скорее, это разделитель в объявлении переменных комбинирующий их множество в одно выражение.
Следующий пример демонстрирует, что хотя переменной y будет присвоен только последний элемент (x), но выражение слева от запятой (x += 1) также будет вычислено:
На практике оператор «запятая» обычно используется только в сочетании с инструкцией for
:
Здесь первая запятая является частью синтаксиса инструкции var. Вторая запятая является оператором: она позволяет внедрить два выражения (i++ и j--) в инструкцию (цикл for), которая ожидает одно выражение.
Операторы доступа (.) и ([])
В JavaScript объект — это набор свойств ассоциированных с ним. Свойство объекта можно рассматривать как переменную, которая закреплена за этим объектом. Свойства объекта определяют его характеристики. Получить доступ к свойству объекта можно с помощью оператора «точка» (.) или оператора «квадратные скобки» ([]).
Например, давайте создадим объект myAuto и, применив оператор «точка», определим его свойства make, model, и year. Вы определяете свойство, просто указывая его значение следующим образом:
var myAuto = {};
myAuto.make = "Mercedes";
myAuto.model = "Maybach";
myAuto.year = 2018;
Доступ к свойствам объектов JavaScript можно получить с помощью оператора «точка» (.)
или через квадратные скобки []
. Объекты являются ассоциативными массивами, так как каждое свойство ассоциировано с именем, через которое можно получить доступ к нему. Например, доступ к свойствам объекта myAuto
можно получить следующим образом:
Слева от оператора «точка» (.)
указывается объект (массив или функция), а справа – идентификатор (имя свойства), к которому выполняется доступ.
Слева от оператора «квадратные скобки» []
указывается объект (массив или функция), а внутри квадратных скобок – имя свойства (или индекс элемента массива). Именем свойства может быть строка или число.
Примечание: Правый операнд оператора «точка» (.)
не может быть строкой или переменной, содержащей строку – он должен быть точным именем свойства или метода без каких-либо кавычек.
На заметку: При попытке получить доступ к несуществующему в объекте свойству, интерпретатор JavaScript не генерирует ошибку, а возвращает в качестве значения выражения undefined
.
Оператор «квадратные скобки» []
обычно применяется для обращения к элементам массива. Для доступа к свойствам объекта оператор []
менее удобен, так как требует заключения имени свойства в кавычки.
Доступ к любому имени свойства, которое содержит невалидный JavaScript идентификатор (например, имя свойства включает в себя пробелы, тире, знаки пунктуации или начинается с цифры), может быть получен с использованием квадратных скобок:
Такое присвоение как person["favorite music"]
или person["my name"]
было бы невозможно через оператор «точка», так интерпретатор JavaScript после первого пробела подумает, что свойство закончилось, и далее выдаст синтаксическую ошибку:
Оператор delete
Оператор delete используется для удаления свойств объекта и элементов массива. Он возвращает true
, если удаление прошло успешно, и false
в противном случае.
Длина массива после удаления из него элемента с помощью оператора delete
остается прежней. Удаленный элемент принимает значение undefined
:
На заметку: Удаленный элемент массива принимает значение undefined
, вместе с ним удаляется и его индекс. Оставшиеся элементы сохраняют свои прежние индексы, а длина массива не изменяется.
Некоторые свойства объектов не могут быть удалены. В спецификации ECMAScript такие свойства обозначены флагом DontDelete. Можно удалить переменные, объявленные глобально, т.е. без ключевого слова var
, но нельзя – объявленные через var
:
На заметку: Удаленное свойство объекта, переменная или элемент массива не просто устанавливается в undefined
. Когда переменная удалена, она прекращает существование.
Задачи
-
Создайте объект obj. Выведите на экран свойство элемента с именем 'animal' двумя способами: через квадратные скобки и через оператор «точка»:
var obj = {fruit: "an Apple", flower: "rose", animal: "dog"}; /* ваш код */
Решение:
-
Объект person
- Создайте пустой объект
person
. - Добавьте свойство
name
со значением введенным пользователем (через prompt). - Добавьте свойство
surname
со значением введенным пользователем. - Добавьте свойство
age
со значением введенным пользователем. - Выведите на экран свойства объекта
person
. - Поменяйте значение
name
наJohn
и выведите его на экран.
Показать решениеРешение:
-
- Создайте массив arr с элементами 'Привет, ', 'мир' и '!'.
- Удалите второй элемент массива и убедитесь, что он удален.
- Создайте второй элемент массива 'JavaScript'.
- Используя элементы массива arr выведите на экран фразу 'Привет, JavaScript!'.
Показать решениеРешение:
Алгоритм решения задачи:
- Второй элемент массива хранится под индексом 1, это значит, что для доступа к нему мы должны написать arr[1].
- Применив оператор delete удаляем arr[1].
- С помощью оператора доступа создаём снова второй элемент массива.
- Далее с помощью оператора '+' мы сложим три наши строки ('Привет, ', 'JavaScript' и '!') в одну строку таким образом arr[0] + arr[1] + arr[2], и выведем на экран с помощью alert.
- Создайте пустой объект
-
Комментарии
<code>
, несколько строчек кода — в теги<pre><code>
...ваш код...</code></pre>
.