JS меня злит - оператор if и оператор

  • Автор темы Max7771
  • 27
  • Обновлено
  • 12, May 2024
  • #1
Привет, ребята! У меня есть этот простой код:
 

//$UT = parseInt(document.getElementById("XML_type").value);

//$ASZ = document.getElementById("XML_person").value;

$UT = 1;

$ASZ = "0123456789101";

$LE= $ASZ.length;

if(($UT&2 == 2 && $LE != 13) || ($UT&2 != 2 && $LE> 0)){

msg = "ALERT";

console.log(msg);

}

Код (разметка): Я просто не могу понять, что происходит... Если $LE= 13, перейти к оператору невозможно. мне кажется, я что-то сильно не понимаю Помогите плз!

Max7771


Рег
28 May, 2015

Тем
1

Постов
2

Баллов
12
  • 18, May 2024
  • #2
Спасибо за ваш ответ! Я понял! Правильный способ поместить оператор & в «()», поскольку оба являются логическими выражениями, а == имеет приоритет над & . Гррр
 

//$UT = parseInt(document.getElementById("XML_type").value);

//$ASZ = document.getElementById("XML_person").value;

$UT = 1;

$ASZ = "0123456789101";

$LE= $ASZ.length;

if((($UT&2) == 2 && $LE != 13) || (($UT&2) != 2 && $LE> 0)){

msg = "ALERT";

console.log(msg);

}

Код (разметка):
 

Alexbox87


Рег
01 Aug, 2014

Тем
1

Постов
3

Баллов
13
  • 10, Jun 2024
  • #3
Что должен проверять $UT & 2? Похоже на конкатенацию строк, но затем сравнение с целым числом У меня возникла проблема с заменой & на +
 var UT = 1;

var ASZ = "0123456789101";

//var ASZ = "012345678910";

var LE = ASZ.length;

console.log(UT & 2);

console.log(LE);

if ((UT + 2 == 2 && LE != 13) || (UT + 2 != 2 && LE > 0)) {

msg = "ALERT";

console.log(msg);

}

if (UT + 2 == 2 && LE != 13) {

msg = "ALERT1";

console.log(msg);

}

else if(UT + 2 != 2 && LE > 0) {

msg = "ALERT2";

console.log(msg);

}

Код (JavaScript):
 

Lainer


Рег
22 Sep, 2012

Тем
1

Постов
2

Баллов
12
  • 10, Jun 2024
  • #4
Поскольку вы оцениваете только двоичный код, вам не нужно == 2 в первую очередь.

Вы проверяете только один двоичный бит, поэтому он будет либо 0, либо 2. Поскольку ноль является логическим значением false, вы могли бы просто написать это как:
 
if (
(($UT & 2) && $LE != 13) ||
(!($UT & 2) && $LE > 0)
) {
Код (разметка): поскольку у нас есть свободное логическое значение, используйте его.

То же самое, что выполнить «тест» на ассемблере, jz или jnz. Кроме того, если бы LE никогда не был отрицательным, вы могли бы отказаться от > 0 просто ради & & $LE. Хотя это и не PHP, что за префиксы со знаком доллара?
 

123456123456


Рег
30 Oct, 2006

Тем
0

Постов
3

Баллов
3
Тем
49554
Комментарии
57426
Опыт
552966

Интересно