Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Оператор или, ||


Автор: G0rin 13.11.2010, 23:26
похоже не могу разобраться в логике, необходимо, чтоб если последний знак в окне ввода не равен знакам умножения, деления, вычитания и сложения, то выполнялся определенный код, если символ, то ничего не происходило. Но почему-то условие работает только с первым значением, тоесть если последний знак + то код действительно не работает,  но если "-", "*" или "/" Код все равно выполняется. пример условия
Код

if (cons.value.substr(-1) !=  ('+' || '-' || '*' || '/')) 

Автор: Amphiluke 14.11.2010, 09:53
Так никто не делает.
Вот пример, как это в норме может выглядеть.
Код

if (/.*[\+\-\*\/]$/.test(cons.value)) {
    ...


Добавлено через 3 минуты и 38 секунд
Ну или наоборот, если нужно отрицательное условие, то 
Код

if (!/.*[\+\-\*\/]$/.test(cons.value)) {
    ...

Автор: NLspieler 14.11.2010, 16:59
Код

if (cons.value.substr(-1) !=  ('+' || '-' || '*' || '/'))


Нужно писать так:

Код

var c = cons.value.substr(-1) ;
if (  (c != '+') || (c != '-') || (c != '*') || (c != '/')   )


но такое условие всегда будет возвращать true, поэтому нужно вместо || использовать &&

Код

var c = cons.value.substr(-1) ;
if (  (c != '+') && (c != '-') && (c != '*') && (c != '/')   )



Автор: G0rin 14.11.2010, 22:03
Amphiluke, мне просто это надо к зачету по пройденному материалу, а регулярные ворожения мы не использовали, но спасибо!

NLspieler, спасибо!

Автор: SelenIT 15.11.2010, 00:51
Цитата(G0rin @  13.11.2010,  23:26 Найти цитируемый пост)
если последний знак + то код действительно не работает,  но если "-", "*" или "/" Код все равно выполняется

Логические операторы в JS "короткозамкнутые", т.е. цепочка условий "или" возвращает первый элемент, приводящийся к логическому true (и тем самым делающий истинным всё составное условие). В данном случае первым таким элементом является строка '+', поэтому именно она оказывается итоговым значением всего выражения в скобках, которое и используется в сравнении.

Часто этим свойством условий пользуются для сокращения записи, напр. var event = e || window.event (если переменной e нет, будет использована глобальная переменная).

Автор: gcc 15.11.2010, 10:06
если я праивльно понял, то можно еще так:
(примерно)
Код

var hash = { '+' : 666, '-' : 666, '*' : 666 , '/' : 666};

// var cсс = cons.value.substr(-1) ;
//  if  (hash[ссс]) {
//
// Pluss:
if  (hash['+']) {

}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)