2014-07-18 4 views
0

Есть ли способ явно выдать исключение из выражения в JavaScript, помимо размещения этого throw функции-оболочки?Есть ли способ выбросить исключение из выражения, кроме использования функций?

throw - инструкция, инструкции не приводят к значениям, поэтому они не могут использоваться в выражениях, которые действуют на значения и всегда производят значение. Совершенно очевидно, что любой оператор можно поместить в функцию, и из выражения можно использовать вызов функции. Есть ли способ избежать обертывания оператора throw функции и выкинуть из выражения напрямую?

UPDATE:

Некоторые люди говорят, что это не совсем понятно, о чем я спрашиваю о. Рассмотрим гипотетический пример (не реальный), это то, что я желаю работал, но это не делает:

var one = value != null ? value * value : (throw new Error('The value has not been provided')); 

var two = value != 0 ? 1/value : (throw new Error('The result cannot be evaluated because the value is zero which would give a division by zero problem.)); 
+3

Ваша реальная проблема не ясна. Что случилось с ''? –

+0

Не могли бы вы показать пример или пояснить, что вы имеете в виду? –

+0

Почему вы хотите «бросать» прямо из выражения? Вы бы выбрали только некоторые условия - так почему бы не использовать блоки 'if' /' else' или 'try' /' catch' ... Вы просите однострочный чек? –

ответ

0

Нет. Как вы сказали, throw это заявление и заявления не могут появляться в качестве части выражения.

Единственный способ выполнить инструкцию из оценки выражения - это вызов функции или eval. Использование функции THROW(new Error(…)), вероятно, лучшее, что вы можете получить.

Но видит в ней ничего, идут с простым, читаемым заявлением:

if (value == null) throw new Error('The value has not been provided'); 
var one = value * value; 

if (value == 0) throw new Error('division by zero"); 
var two = 1/value; 

Это будет не только работать, но и вписывается в линии.

+0

Есть ли выражение-выражение выражения 'throw', которое выбрасывает? –

+1

Нет. Есть несколько выражений, которые бросают typeerrors и т. Д. Во время их оценки, но не существует эквивалента выражения 'throw'. – Bergi

0

Да, вы можете бросить троянец! Возможно, некоторые из них могут назвать мое решение немного взломанным, но это очень просто рассуждать.

throw from a ternary

var two = value != 0 ? 1/value : (void 0).throwDivideByZero() 

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

  • Нет связанных вопросов^_^