@chelovek7

Почему var name=null определяется как тип string?

Почему var name=null, var name=1234 определяется как тип string?

<script>
var name = 1234;
document.write(typeof(name)); // string

document.write("<br>");

var name = null;
document.write(typeof(name)); // string

document.write("<br>");

var name1 = 1;
document.write(typeof(name1)); // number

document.write("<br>");

var name1 = null;
document.write(typeof(name1)); // object
</script>
  • Вопрос задан
  • 176 просмотров
Решения вопроса 3
0xD34F
@0xD34F Куратор тега JavaScript
Потому что объявляемая вами переменная name - глобальная, применительно к клиентскому javascript'у это означает, что она окажется свойством объекта window, у которого свойство name уже есть, и, как нам тут подсказывают, его значения могут быть только строками:

window.name converts all stored values to their string representations using the toString method
Ответ написан
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
Вы пытаете переопределить свойство window.name, т.к. в данном коде контекст выполнения это window, а значит name это window.name. Данное свойство если я не ошибаюсь, имеет встроенный геттер и сеттер, которые при присвоении ему значения, переводят его в строку (или может при получении через getter, не важно). Попробуйте написать name={}; console.warn(name);, и получите [object Object]. т.е. получается, что в этом свойстве всегда строка, поэтому typeof возвращает строку. Даже null переводится в "null". Если вы в теле функции определите имя name, то оно будет взято из лексического объекта этой функции, а не window, и такой проблемы не будет. Или же пишите
let name = 20;
Ответ написан
Комментировать
Как написали выше, если объявлять через var, то вы изменяете в window.name. Чтобы такого не было, объявляйте через let

let
5af71a730803e590956220.png

var
5af71a854abde623480302.png

PS закладывайте себе, что переменная должна иметь только один тип. В дальнейшем это вам очень сильно поможет
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы