Причина, по которой не удается (она не должна быть не суметь молча, следует бросать исключение) является то, что вы пытаетесь получить значение из символа (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 очень быстро, когда речь идет о бросать исключения (это не относится ко всем средам), но если вы ожидаете, что это условие не является чем-то необычным (не исключительный), то я бы обработал его встроенной логикой, а не исключением. Исключения составляют исключительные условия.
+1, в основном потому, что это выглядит, как будто это медленное утро голосов в яваскрипте тэга: -) –
Обработка исключений - слишком много для этого, довольно общего, тестирования свойств. –
@Marko: Полностью согласен, даже сказал так в своем ответе. :-) –