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;
Поделиться:
Популярные книги
Я все еще барон
4. Дорогой барон!
Фантастика:
боевая фантастика
5.00
рейтинг книги
Хозяин Теней 2
2. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Уникум
1. Уникум
Фантастика:
альтернативная история
4.60
рейтинг книги
Боярышня Дуняша 2
2. Боярышня
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Сильнейший Столп Империи. Книга 3
3. Сильнейший Столп Империи
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Белый Волк
2. Викинг
Приключения:
исторические приключения
9.12
рейтинг книги
Эволюционер из трущоб. Том 5
5. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Конец детства (сборник)
Фантастика:
научная фантастика
7.00
рейтинг книги
Властелин Севера
3. Саксонские хроники
Приключения:
исторические приключения
8.67
рейтинг книги
Двойник Короля 5
5. Двойник Короля
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Старый, но крепкий 7
7. Культивация без насилия
Фантастика:
рпг
уся
фэнтези
5.00
рейтинг книги
Газлайтер. Том 5
5. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Матабар VIII
8. Матабар
Проза:
магический реализм
5.00
рейтинг книги
Агенты ВКС
3. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00