Проверка переменной оператором javascript

327
21 сентября 2017, 18:05
    var active=0;
    var online=1;
    if([online == 1][active === 0])
    {
    active=1;
    alert('принято')
    } 
    else {
    active=0;alert('отказ');
    }

Условия соблюдены, но срабатывает else. Почему?

Answer 1

Квадратными скобками обозначается литерал массива

Таким образом внутри if происходит следующее:

  1. создается массив с одним элементом: [online == 1], так как online действительно равен 1 - результат сравнения true, поэтому эту часть можно заменить на [true].

  2. идет попытка получения у указанного выше массива свойства, имя свойства определяется так: active === 0, результат true. При использовании скобочной нотации имя свойства переводится в строку. Таким образом у массива получается свойство с именем true. Так как такого свойства у массива нет, результат - undefined.

  3. undefined - в условиях эквивалентно false, поэтому выполняется ветка `else.

для избегания подобных ошибок не нужно использовать литерал массива, а для объединения проверок необходимо использовать логические операторы

var active = 0; 
var online = 1; 
if (online == 1 && active === 0) { 
  active = 1; 
  console.log('принято') 
} else { 
  active = 0; 
  console.log('отказ'); 
}

Answer 2

Очевидно у вас ошибка в if. Перепишите вот так:

var active=0;
var online=1;
if(online === 1 && active === 0)
{
active=1;
alert('принято')
} 
else {
active=0;alert('отказ');
}
READ ALSO
Голосовое заполнение формы

Голосовое заполнение формы

Подскажите кто какие библиотеки знает для голосового заполнения HTML форм или у кого какие идеи и мысли есть насчет этогоСлышал что x-webkit-speech...

468
Инициализация начального состояния в React-Redux-приложении

Инициализация начального состояния в React-Redux-приложении

Делаю приложение на React JSНепонятная проблема с инициализацией начального состояния

334
JS. Как получить statusText ответа?

JS. Как получить statusText ответа?

Если отправлять запрос к API через Postman, то он он рядом с кодом выводит статус-текст ответаЕсли же делать запрос из кода JS, то я не могу получить...

204
Как начать во front-end

Как начать во front-end

Прошу судить не слишком строго

221