2014-05-07 4 views
1

Я пытаюсь проверить несколько операторов в Coffeescript, прежде чем продолжить.несколько OR в IF-заявлении в Coffeescript

У меня есть что-то основное, как это:

if ext != 'jpeg' || ext != 'pdf' || ext != 'jpg' 

    alert('extension must be jpg, pdf, jpeg') 

Что я делаю неправильно здесь? я новичок в Coffee и считаю что-то как основное, поскольку это не должно быть трудно сделать.

+0

должен быть 'и' ('&&') не 'или' ('||') –

+0

'(ext! = 'Jpeg' || ext! = 'Pdf' || ext! = 'Jpg') = = (true) '. Вы говорите, что это может быть нечто, кроме «jpeg», ** или ** ничего, кроме «pdf» ... Если вы думаете об этом, это означает, что это может быть «jpeg», 'или' 'pdf'' или что-то еще. – Zaz

ответ

2

Вы забыли добавить &&.

if ext != 'jpeg' && ext != 'pdf' && ext != 'jpg' 
    alert('extension must be jpg, pdf, jpeg') 
+0

Извините, что я изначально написал его в Javascript! Вы были правы, теперь я исправил код для CoffeeScript – Pavan

5

CoffeeScript имеет in operator, так что вы можете сказать element in array сделать логику более компактной:

Вы можете использовать in для проверки наличия массива, [...]

В вашем случае:

if ext !in ['jpeg', 'pdf', 'jpg'] 
    alert('extension must be jpg, pdf, jpeg') 

The curren t Компилятор CoffeeScript достаточно умен, чтобы распознать этот шаблон и создает этот код JavaScript:

if (ext !== 'jpeg' && ext !== 'pdf' && ext !== 'jpg') { 
    alert('extension must be jpg, pdf, jpeg'); 
} 

скорее, чем нечто более дорогое.

+0

Приятно знать. Будет ли это работать, даже если у меня нет массива? Я бы не хотел строить массив только для его прокрутки и проверки значений. Кажется, что немного дополнительного кода –

+0

Массив существует только в версии CoffeeScript, литерал массива будет расширен встроенным, когда он будет преобразован в JavaScript. 'e in [a, b, c]' - это всего лишь более короткий способ сказать 'e === a || e === b || e === c'. –

+0

Сладкий! Спасибо за совет –

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