2010-03-10 4 views
2

Я пытаюсь проверить, нет ли моего объекта литерала на моей странице.Как проверить, нет ли литерала объекта на странице?

var today = { 
     okay : true 
    } 

Если этот фрагмент не в моей странице я хочу, чтобы проверить нулевой или неопределенным, но он убивает молча ...

if (today.okay == null) 
if (today.okay == undefined) 

Что делать?

ответ

4

Причина, по которой не удается (она не должна быть не суметь молча, следует бросать исключение) является то, что вы пытаетесь получить значение из символа (today), которые не могут быть определены.

Попробуйте это:

if (typeof today == 'object' && today.okay) { 
    // It's there 
} 
else { 
    // It's not there 
} 

С другой стороны, конечно, вы можете просто обработать исключение:

try { 
    if (today.okay) { 
     // 'today' is defined and 'okay' is truthy 
    } 
    else { 
     // 'today' is defined, but 'okay' is not truthy 
    } 
} 
catch (e) { 
    // 'today' is undefined 
} 

У меня сложилось впечатление, что большинство двигателей JavaScript очень быстро, когда речь идет о бросать исключения (это не относится ко всем средам), но если вы ожидаете, что это условие не является чем-то необычным (не исключительный), то я бы обработал его встроенной логикой, а не исключением. Исключения составляют исключительные условия.

+0

+1, в основном потому, что это выглядит, как будто это медленное утро голосов в яваскрипте тэга: -) –

+0

Обработка исключений - слишком много для этого, довольно общего, тестирования свойств. –

+0

@Marko: Полностью согласен, даже сказал так в своем ответе. :-) –

2

Предполагая, что вы требуете «хорошо», чтобы быть логическим выражение вы ищете это:

('object' == typeof today && today.okay === true)​​​ 
Смежные вопросы