Если мы можем переопределить undefined в Javascript, откуда 'void 0' берет значение?

1

Я знаю, что undefined ключевое слово не зарезервировано, и можно сделать все, что захочет. Поэтому мы можем переопределить его, например. Но если мы переопределяем undefined в Javascript, откуда принимает значение void 0?

Попробуйте этот фрагмент кода:

let undefined = 'test';
console.log(undefined); // prints out 'test'
console.log(void 0); // prints out 'undefined'

На первый взгляд, похоже, что Javascript предоставляет вторую версию undefined где-то внутри и всегда возвращает ее в результате оператора void.

  • 0
    let undefined = 'test' неверный синтаксис
  • 1
    Если что-то оценивается как неопределенное, то движок вернет свою реализацию примитивного типа, известного как неопределенный. Для возврата «test» предполагается, что он возвращает доступный глобал с этим именем, что не соответствует действительности.
Показать ещё 1 комментарий
Теги:

3 ответа

6
Лучший ответ

void 0 не вытягивает свое значение из вашей undefined переменной. Он возвращает примитивный тип undefined: https://developer.mozilla.org/en-US/docs/Glossary/Primitive.

Ваш код определяет переменную с тем же именем - не переопределяя сам примитивный тип. Насколько мне известно, это невозможно.

Подробнее об этом вопросе: возможно ли перезаписать примитивный тип данных javaScript?

  • 0
    Это мой ответ :)
  • 0
    В качестве быстрого продолжения попробуйте это в качестве теста: console.log(typeof undefined); var undefined = "test"; console.log(typeof undefined); console.log(typeof undefinedVariable);
Показать ещё 3 комментария
0

Оператор void всегда возвращает undefined для любого переданного operator. Это undefined, возвращаемая void представляет собой элементарное значение undefined, которое НЕ является записью, перечислимо и настраиваются.

Из вашего кода,

   let undefined = 'test';

Если вы проверите тип, вы получите string.

console.log(typeof(undefined))  //returns string

Это означает, что undefined инициализированная переменная не является примитивной undefined которая возвращает void expression.

0

undefined указывает на внутренний объект. void возвращает этот внутренний объект.

  • 0
    Так что, переопределив undefined мы просто изменим указатель?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню