Пытаясь понять разницу между null и undefined в JavaScript, я наткнулся на этот ответ, в котором упоминается

null - значение присваивания. Его можно присвоить переменной как представление без значения .

Вопрос в том, как только вы определите такую переменную, как:

var someVariable = null;

Разве someVariable не определил какое-то место в памяти? тогда не должно ли в нем уже быть случайных 0 и 1, если иначе не присвоено конкретное значение? На битовом уровне что представляет null? Означает ли это биты, пустые от 0 или 1?

4
the0roamer 18 Сен 2018 в 23:42

2 ответа

Лучший ответ

Кажется, вас смутил ответ, в котором говорится, что « null не является значением » или что он означает « переменная, не имеющая значения ». Это неправильно, и это не то, о чем говорится.

Значение null во многом является значением в области языка JS. Это примитивное значение, подобное undefined, true, NaN, 0 или 42.

В приведенном вами ответе говорится, что это значение может представлять "отсутствие значения" в вашем домене приложения. Ввод значения null туда означает , что у него нет другого значения, например будучи «ни истинным, ни ложным».

(И какое бы значение JS мы ни рассматривали, нас не волнует его битовое представление в памяти, например, какой именно бит будет отличать строку от целого числа. Это просто значения, с которыми мы можем работать в нашей программе, и других нет.
Фактически, переменная let в JS действительно может находиться в состоянии неинициализации, но это не означает, что существует случайный битовый шаблон, который мы можем прочитать, а скорее это явное состояние, которое заставляет программу генерировать исключение при оценке переменной. И переменные var всегда инициализируются значением undefined при создании области.)

3
Bergi 18 Сен 2018 в 21:53

Во-первых, при программировании на JS никогда не следует беспокоиться о том, что именно хранится в памяти при объявлении переменной. Это язык высокого уровня с автоматическим управлением памятью (включая сборку мусора) - в отличие от C, где я считаю, что вы можете иметь дело с реальной памятью, если хотите. (NB, я никогда не программировал на C или на подобном ему низкоуровневом языке, поэтому все, что я говорю об этом языке, следует воспринимать с большим недоверием.) Переменные JS - это просто абстракция, в которой вы используете имя в качестве «контейнер» для определенного значения (которое может меняться со временем - отсюда и название «переменная»).

Что касается того, почему JS имеет два значения «ничего» в null и undefined - это очень хороший вопрос, и, вероятно, это просто причуда языка. undefined - лучшее представление "без значения", поскольку это значение, которое объявленные переменные будут удерживать до того, как им будет присвоено другое значение, возвращаемое значение по умолчанию из функции, в которую вы просто поместили return; или оставьте оператор return, и значение автоматически присваивается любым параметрам функции, которые находятся в сигнатуре функции, но не передаются при вызове.

Что касается null, я не уверен, зачем он должен существовать, но он существует с самого начала. В основном по соглашению он обычно используется разработчиками определенных библиотек в местах, где объект ожидается, но на самом деле его нет. (Несмотря на то, что, как я прокомментировал другой ответ, null сам не является долей объекта.) MDN, например, выделяет это использование: https://developer.mozilla.org/en-US/docs/Web/ JavaScript / Справка / Global_Objects / пустой # Описание

0
Robin Zigmond 18 Сен 2018 в 22:21