ОсновноеRadiotalkПользовательское
MPCHAT - CMS хостинг чатов для профессионалов
90   •   Посмотреть все темы

Из6ранная фильтрация через JS.

 

67
заблокирован @Mpchu
Люди почему то у меня какая то чертовщина происхолит с JS в чате.
Вот код замены

/* Фильтрация чата */


if(nick != 'aks') text = text.replace(/Антон/g, "Гандон");

Он ра6отает так, что у всех кроме человека с ником aks заменяеться написаное имя Антон на Гандон

Но почему то стоит прописать ещё 1 ник и все перестает ра6отать почему??? Вот 2 спосо6а которыи я прописывал второй ник.

1)

/* Фильтрация чата */


if(nick != 'aks'||nick != 'Dion') text = text.replace(/Антон/g, "Гандон");

2)
/* Фильтрация чата */


if(nick != 'aks') text = text.replace(/Антон/g, "Гандон");
if(nick != 'Dion') text = text.replace(/Антон/g, "Гандон");

Подскажите что я делаю не так?

Отредактировано Mpchu - 09.03.2015
2615
Сергей @Pegass
не дизъюнкция, а конъюнкция
if(nick != 'aks' && nick != 'Dion') text = text.replace(/Антон/g, "Гандон");

2615
Сергей @Pegass
т.к. вопросы по логическим операциям не так уж и редки наверное надо немного лекции

1) && - истина тогда и только тогда, когда все операнды истины
|| - истина если хотя бы один операнд истина

2) Логические операции выполняются не полностью а ровно до того момента пока её результат не известен
возьмём ваш пример
var nick= 'Dion';
if(nick != 'aks'||nick != 'Dion')
это условие всегда будет истинным, а проверка на nick != 'Dion' вообще не осуществится, потому что первый операнд дал истину(что собственно у вас и происходило), точнее проверка выполнится только в том случае если ник будет aks
практическая польза - для ускорения выполнения следует в условиях с логическим ИЛИ вначале указывать операнды с наибольшей вероятностью истины, а в условиях с логическим И операнды с наибольшей вероятностью лжи
3) Операция && - это умножение, а операция || - это сложение, из этого правила расставляются скобки например записи вида (A && B || C) и ((A && B) || C) - это одно и то же , а вот (A && (B || C)) - это уже другое
4) Операция отрицания - логическое НЕ, !,!= - всегда выполняется первой, операция возвращает противоположное значение, т.е. меняет истину на ложь и наоборот
nick != 'Dion' является укороченной записью, полная выглядит так !(nick == 'Dion')

5) как собирать сложные логические условия?
Для начала следует научиться обходиться без них
например
if(nick != 'aks' && nick != 'Dion') text = text.replace(/Антон/g, "Гандон");
выглядело бы так
if(nick != 'aks')
{
if(nick != 'Dion')
{
text = text.replace(/Антон/g, "Гандон");
}
else
{
//ничего не делать
}
}
else
{
//ничего не делать
}

а условие if(nick != 'aks'||nick != 'Dion') выглядело бы так
if(nick != 'aks')
{
text = text.replace(/Антон/g, "Гандон");
}
else
{
if( nick != 'Dion')//и вот тут становится понятно что это условие всегда будет истиной, потому что тут ник точно равен 'aks'
{
text = text.replace(/Антон/g, "Гандон");
}
else
{
//ничего не делать
}
}

67
заблокирован @Mpchu
Pegass пишет:

не дизъюнкция, а конъюнкция
if(nick != 'aks' && nick != 'Dion') text = text.replace(/Антон/g, "Гандон");

Спасибо помогло.