Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

this.x =1; // Создать настраиваемое глобальное свойство (без var)

delete х; // И удалить его

Однако в строгом режиме оператор

delete
возбуждает исключение
SyntaxError
, если его операндом является неквалифицированный идентификатор, такой как х, поэтому необходимо указывать явное выражение обращения к свойству:

delete х; // В строгом режиме возбудит исключение SyntaxError

delete this.x; // Такой способ работает

6.4. Проверка существования свойств

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

in
, с помощью методов
hasOwnProperty
и
propertylsEnumerable
или просто обратившись к свойству.

Оператор

in
требует, чтобы в левом операнде ему было передано имя свойства (в виде строки) и объект в правом операнде. Он возвращает
true
, если объект имеет собственное или унаследованное свойство с этим именем:

var о = { х: 1 }

”х" in о; // true: о имеет собственное свойство "х"

"у" in о; // false: о не имеет свойства "у"

"toString" in о; // true: о наследует свойство toString

Метод

hasOwnProperty
объекта проверяет, имеет ли объект собственное свойство с указанным именем. Для наследуемых свойств он возвращает
false
:

var о = { х: 1 }

о.hasOwnPropertyC'x"); // true: о имеет собственное свойство х

о.hasOwnPropertyC'y"); // false: не имеет свойства у

о.hasOwnProperty("toString"); // false: toString - наследуемое свойство

Метод

propertylsEnumerable
накладывает дополнительные ограничения по сравнению с
hasOwnProperty
. Он возвращает
true
, только если указанное свойство является собственным свойством, атрибут
enumerable
которого имеет значение
true
. Свойства встроенных объектов не являются перечислимыми. Свойства, созданные обычной программой на языке JavaScript, являются перечислимыми, если не был использован один из методов ECMAScript 5, представленных ниже, которые делают свойства неперечислимыми.

var о = inherit({ у: 2 }); о.х = 1;

о.propertyIsEnumerable("x“); // true: о имеет собств. перечислимое свойство х

о.propertyIsEnumerable("у"); // false: у - унаследованное свойство, не собств.

Object.prototype.propertyIsEnumerable("toString”); // false: неперечислимое

var о = { х: 1 }

о.х !== undefined; // true: о имеет свойство х

о.у !== undefined; // false; о не имеет свойства у

o.toString !== undefined; // true: о наследует свойство toString

Однако оператор

in
отличает ситуации, которые неотличимы при использовании представленного выше приема на основе обращения к свойству. Оператор
in
отличает отсутствие свойства от свойства, имеющего значение
undefined
. Взгляните на следующий пример:

var о = { х: undefined } // Свойству явно присвоено значение undefined

о.х !== undefined // false: свойство имеется, но со значением undefined

о.у !== undefined // false: свойство не существует

"х" in о // true: свойство существует

"у” in о // false: свойство не существует

delete о.х; // Удалить свойство х

"х" in о // false: оно больше не существует

Обратите внимание, что в примере выше использован оператор

!==
, а не
!=
. Опера¬торы
!==
и
===
отличают значения
undefined
и
null
, хотя иногда в этом нет необходимости:

// Если о имеет свойство X, значение которого отлично от null и undefined,

// то удвоить это значение,

if (о.х != null) о.х *= 2;

// Если о имеет свойство х, значение которого не может быть преобразовано в false,

// то удвоить это значение. Если х имеет значение undefined, null, false, 0 или NaN,

// оставить его в исходном состоянии,

if (о.х) о.х *= 2;

Поделиться:
Популярные книги

Драконы

Мартин Джордж Р.Р.
Фантастика:
фэнтези
8.08
рейтинг книги
Драконы

Неучтенный элемент. Том 11

NikL
11. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 11

Путь

Yagger Егор
Фантастика:
космическая фантастика
4.25
рейтинг книги
Путь

Матабар VIII

Клеванский Кирилл Сергеевич
8. Матабар
Проза:
магический реализм
5.00
рейтинг книги
Матабар VIII

Черный Маг Императора 10

Герда Александр
10. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 10

Я спас ссср! том iv

Вязовский Алексей
4. Я спас СССР
Фантастика:
альтернативная история
6.62
рейтинг книги
Я спас ссср! том iv

Древесный маг Орловского княжества 2

Павлов Игорь Васильевич
2. Орловское княжество
Фантастика:
аниме
сказочная фантастика
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 2

Как прорастают зерна

Волкова Дарья
Любовные романы:
современные любовные романы
7.00
рейтинг книги
Как прорастают зерна

Князь Андер Арес 4

Грехов Тимофей
4. Андер Арес
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Князь Андер Арес 4

Бояръ-Аниме. Газлайтер. Том 35

Володин Григорий Григорьевич
35. История Телепата
Фантастика:
аниме
боевая фантастика
фэнтези
5.00
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 35

Дракон

Бубела Олег Николаевич
5. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.31
рейтинг книги
Дракон

Охотник за головами

Вайс Александр
1. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Охотник за головами

Древесный маг Орловского княжества 4

Павлов Игорь Васильевич
4. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 4

Газлайтер. Том 10

Володин Григорий
10. История Телепата
Фантастика:
боевая фантастика
5.00
рейтинг книги
Газлайтер. Том 10