Условие истинности Javascript не обнаруживает логическое значение

#javascript #conditional-statements

#javascript #условные операторы

Вопрос:

У меня есть эта часть кода:

    let values = true;

let msg = 'message1';
        if(values) {let msg = 'message2';}

        console.log(msg);
  

И у меня всегда есть message1 в журнале консоли.

Как я знаю, if(values) должно удовлетворять оператору if для любого истинного значения значений, включая true, любое ненулевое число, любое непустое строковое значение, любую ссылку на объект или массив и т. Д…

Так почему же это не работает?

Комментарии:

1. Почему у вас есть let msg внутри if ? удалите let , и это сработает

2. черт, я удалил его, и он работает! Хм, я подумал, что LET if для определения переменных, не знал, что достаточно определить его один раз. Спасибо!

3. let имеет локальную область действия оператора внутреннего блока.

Ответ №1:

Область видимости переменной, объявленной с помощью let , — это самый внутренний блок кода, который ее содержит.

В вашем примере есть две разные переменные с именами msg .

Первый ( let msg = 'message1') is the one printed by console.log(msg);`.

Второй (пусть msg = ‘message2’) существует только в блоке ( {...} ), где он объявлен. Оно уничтожается, когда выполнение кода покидает блок (at } ).
Внутри этого блока внешняя переменная named msg недоступна.

Нет необходимости объявлять переменную несколько раз (если только ваша цель не состоит в том, чтобы получить эффект, с которым вы столкнулись сейчас). Объявляйте его только один раз, прежде чем оно будет использовано в первый раз.

Этот код работает так, как ожидалось:

 let values = true;
let msg = 'message1';

if (values) {
  msg = 'message2';
}

console.log(msg);
  

Вы можете добавить console.log() вызовы внутри if блока, чтобы проверить, что он выполняется (потому что условие true ):

 let values = true;
let msg = 'message1';

if (values) {
  let msg = 'message2';
  console.log('inner: '   msg);
}

console.log('outer: '   msg);  

Ответ №2:

Проблем с if оператором нет. Он работает правильно, но проблема в том, что вы снова определили msg переменную с let msg = 'message2';

Это должно быть заменено на msg = 'message2' , и оно будет работать.

 let values = true;

let msg = 'message1';
if(values) {
  msg = 'message2';
}
console.log(msg);