Подтвердить что ты не робот

Console.log(! status) в глобальной области, создающей неожиданный результат

Перейдем к интересной проблеме. Я работал над попыткой переключить логическое значение, которое было присвоено переменной. Он не работал, и в конце концов я пробовал этот код.

var status = false;
console.log(!status);

Я ожидал, что он предоставит true в консоли, но вместо этого я получил false. Я понял, что javascript сначала запускает код внутри скобки, чтобы найти его значение, а затем console.log значение. Не могли бы вы объяснить, почему я не получаю значение true в консоли?

4b9b3361

Ответ 1

window.status уже существует (он используется для получения/установки текста строки состояния браузера) и когда значение присваивается он преобразуется в строку. Если вы выполняете console.log( status );, вы увидите, что status имеет строковое значение "false", что приводит к тому, что вы видите вывод false, так как вы действительно имеете !"false" и "false" правдивое значение в JavaScript.

Если вы делаете то же самое внутри функции, вы получите ожидаемый результат:

(function ( ) {
  var status = false;
  console.log(!status); // true
})();

Ответ 2

MDN

var statu = false;
console.log(!statu);

Ответ 3

См. приведенный ниже снимок экрана, в котором говорится, что статус является свойством в окне. Таким образом, это напрямую относится к window.status. Не рекомендуется повторно использовать определенные переменные и свойства, имеющие значение по умолчанию (напоминание о ключевых словах в языках oops)

введите описание изображения здесь

Ответ 4

Проверьте тип status следующим образом:

typeof status

Выход будет: "string".

Обратите внимание, что false и "false" не совпадают.

Когда вы определяете:

var status = false; //which is actually "false"

Вот почему вы не получаете true.

Ответ 5

(function ( ) {
  var status = false;
  console.log(!status);
})();

Это даст вам ожидаемый результат.

" статус" - это предопределенное имя объектов, методов или свойств JavaScript, зависящих от реализации. Лучше избегать идентификаторов как имен переменных JavaScript. Если вы используете его вне функции, значит, вы хотите реализовать любую другую вещь по значению состояния.