2015-09-13 5 views
0

Я обнаружил, что неопределенное свойство объекта не равно undefined.Неопределенное свойство объекта не равно `undefined`

if (obj.unexistingProperty === undefined) { 
    // condition is false 
} 

if (typeof obj.unexistingProperty === 'undefined') { 
    // condition is true 
} 

В то время как консоли отладчика (инструменты Firebug и Chrome dev) учитывают оба условия true.

Какое объяснение?


Как выяснилось, код проходил внутри

function (undefined) { 
    ... 
} 

что затененной undefined в локальной области видимости.

+2

Не могли бы вы ошибочно переопределить 'undefined'? – icktoofay

+0

@icktoofay это возможно? хром-консоль не позволит мне – Jorg

+0

[Оба условия верны] (http://jsfiddle.net/j2x2q7wb/). –

ответ

1

Как это бывает, undefined не является ключевым словом, как null is- undefined, до ECMAScript 5 можно переопределить что-то еще. Если вы ошибочно установили его на что-то еще, например, число 5, то проверьте что-то на самом деле undefined против него для равенства, вы наверняка закончите с false. С другой стороны, typeof игнорирует локальные привязки.

Если вы можете избежать переопределения undefined, это было бы к лучшему. Другие вещи, которые вы можете сделать, будут проверять на равенство против void 0 (void принимает выражение, отбрасывает его значение и возвращает реальный undefined), или, как подскажут вопрос, используйте typeof вместо undefined.

Смежные вопросы