Почему изменение имени переменной меняет поведение скрипта?

Я только начал учить js и уже чувствую себя как девочка из мема. Имя test в localStarage я не задавал. Почему в первом случае localStorage.getItem("test") это "null" а во втором, судя по всему, null?

var name = localStorage.getItem("test");
console. log(name + ' ' + typeof(name)); // null string
var foo = localStorage.getItem("test");
console. log(foo + ' ' + typeof(foo)); // null object

Ответы (1 шт):

Автор решения: EzioMercer

Всё дело в том как работают 2 вещи:

  1. var в глобальной области видимости
  2. Свойство name у объекта window

И так по порядку:

  1. Когда мы объявляем какую-то переменную с помощью var в глобальной области видимости, оно попадает в объект globalThis, что в браузере является window
  2. Когда мы что-то записываем в window.name, то он автоматически вызывает у этого значения toString()

Вот и получается, что мы получаем на выходе name - строка "null"

→ Ссылка