JavaScript. Подробное руководство, 6-е издание, стр. 66
<b>delete this.f; // Это свойство также нельзя удалить</b>При удалении настраиваемых свойств глобального объекта в нестрогом режиме допускается опускать ссылку на глобальный объект и передавать оператору
<b>delete</b><b>this.x =1; // Создать настраиваемое глобальное свойство (без var)</b><b>delete х; // И удалить его</b>Однако в строгом режиме оператор
<b>delete</b><b>SyntaxError</b><b>delete х; // В строгом режиме возбудит исключение SyntaxError</b><b>delete this.x; // Такой способ работает</b>6.4. Проверка существования свойств
Объекты в языке JavaScript можно рассматривать как множества свойств, и нередко бывает полезно иметь возможность проверить принадлежность к множеству - проверить наличие в объекте свойства с данным именем. Выполнить такую проверку можно с помощью оператора
<b>in</b><b>hasOwnProperty()</b><b>propertylsEnumerable()</b>Оператор
<b>in</b><b>true</b><b>var о = { х: 1 }</b><b>”х" in о; // true: о имеет собственное свойство "х"</b><b>"у" in о; // false: о не имеет свойства "у"</b><b>"toString" in о; // true: о наследует свойство toString</b>Метод
<b>hasOwnProperty()</b><b>false</b><b>var о = { х: 1 }</b><b>о.hasOwnPropertyC'x"); // true: о имеет собственное свойство х</b><b>о.hasOwnPropertyC'y"); // false: не имеет свойства у</b><b>о.hasOwnProperty("toString"); // false: toString - наследуемое свойство</b>Метод
<b>propertylsEnumerable()</b><b>hasOwnProperty()</b><b>true</b><b>enumerable</b><b>true</b><b>var о = inherit({ у: 2 }); о.х = 1;</b><b>о.propertyIsEnumerable("x“); // true: о имеет собств. перечислимое свойство х </b><b>о.propertyIsEnumerable("у"); // false: у - унаследованное свойство, не собств.</b><b>Object.prototype.propertyIsEnumerable("toString”); // false: неперечислимое</b><b>var о = { х: 1 }</b><b>о.х !== undefined; // true: о имеет свойство х</b><b>о.у !== undefined; // false; о не имеет свойства у</b><b>o.toString !== undefined; // true: о наследует свойство toString</b>Однако оператор
<b>in</b><b>in</b><b>undefined</b><b>var о = { х: undefined } // Свойству явно присвоено значение undefined</b><b>о.х !== undefined // false: свойство имеется, но со значением undefined</b><b>о.у !== undefined // false: свойство не существует</b><b>"х" in о // true: свойство существует</b><b>"у” in о // false: свойство не существует</b><b>delete о.х; // Удалить свойство х</b><b>"х" in о // false: оно больше не существует</b>Обратите внимание, что в примере выше использован оператор
<b>!==</b><b>!=</b><b>!==</b><b>===</b><b>undefined</b><b>null</b><b>// Если о имеет свойство X, значение которого отлично от null и undefined,</b><b>// то удвоить это значение, </b><b>if (о.х != null) о.х *= 2;</b><b>// Если о имеет свойство х, значение которого не может быть преобразовано в false,</b>