Почему значение неназначенной переменной в JavaScript равно нулю?

Чтобы попробовать это, я использовал два разных редактора кода Javascript. Он дает два разных вывода для одного и того же кода. Почему это так? Один из них дает значение «ноль», другой — «неопределено».

Вот код, который я написал.

let a ;
var b ; 
console.info(a);
console.info(b);

КодПен Почему значение неназначенной переменной в JavaScript равно нулю?

Почему значение неназначенной переменной в JavaScript равно нулю?

Я пытался проверить версии javascript для редакторов кода, но решения нет. заранее спасибо.

Потому что эта IDE глючная. Сначала они undefined, затем при повторе становятся null. И это не просто визуальный баг. b === undefined сначала приводит к true, затем к false.

gre_gor 20.05.2024 17:09
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
1
67
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В общем, ожидаемое значение неинициализированной переменной равно undefined:

Подъем переменных позволяет использовать переменную в программе JavaScript даже до ее объявления. По умолчанию такие переменные будут инициализированы как неопределенные. Среда выполнения JavaScript сканирует объявления переменных и помещает их в начало функции или скрипта. Переменные, объявленные с ключевым словом var, поднимаются наверх.

https://www.tutorialspoint.com/es6/es6_variables.htm

Однако Javascript реализуется в нескольких проектах, и совсем неудивительно, что эти реализации могут различаться. В этом случае использование null для неинициализированных переменных кажется ошибкой, если только для этого нет очень веской причины, которой я на данный момент не вижу.

Хорошим подходом для предотвращения таких аномалий, возникающих из-за отсутствия инициализации, является явная инициализация переменных тура, например

let x = undefined;

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

Ответ принят как подходящий

Это проблема онлайн-редактора. Кажется, что вместо того, чтобы воссоздавать контекст JavaScript каждый раз при изменении кода, он пытается сбросить все, что скрипт мог установить при последнем запуске, а затем выполняет новый код.

В случае глобальных переменных a и b происходит следующее:

Редактор создает список всех свойств window, которые есть при первом запуске (до выполнения вашего кода), а затем при каждом изменении кода редактор запускает все имеющиеся свойства window, а для тех, которых нет в исходном списке, он делает:

window[key] = null;
delete window[key];

Хотя delete обычно удаляет заданное свойство и приводит к тому, что оно становится undefined, в данном случае этого не произойдет, поэтому a и b становятся null после второго запуска.

Другие вопросы по теме