@ince

Проблема с конструкцией IF и сравнением логических значений?

Почему так бывает?

console.log( re_username.test( str ) === true );      // -> true
if ( re_username.test( str  ) === true ) {	
     console.log('True');   
} else if ( re_username.test( str  ) === false) {	
     console.log('False');   
} else {
     console.log('Not true and not false');   // ! Переходит сюда!
}
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
Xuxicheta
@Xuxicheta
инженер
вот вам пример
console.clear();
const str = 'ddddd'
const reg = /^d{3,10}$/g;
console.log(reg.test(str)); //true
console.log(reg.test(str)); //false
console.log('****************');

if (reg.test(str) === false) {	
  console.log('False');   
} else if (reg.test(str) === true) {	
  console.log('True');   
} else {
  console.log('Not true and not false');   // ! Переходит сюда!
}


Причина тут https://developer.mozilla.org/ru/docs/Web/JavaScri...
метод test(), вызванный несколько раз на одном и том же экземпляре регулярного выражения, будет начинать проверку с конца предыдущего сопоставления.


В общем паттерн регулярки хранит в себе информацию о предыдущем вызове. Используйте лучше String.prototype.match()
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@GreatRash
Ответ написан
Комментировать
dollar
@dollar
Делай добро и бросай его в воду.
В общем виде как-то так:
function foo() {
	return foo.x=!foo.x;
}
console.log(foo()); //True
console.log(foo()); //False
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы