Согласно документации MDN оundefined
:
В современных браузерах (JavaScript 1.8.5 / Firefox 4+) undefined является неконфигурируемым, недоступным для записи свойством согласно спецификации ECMAScript 5. Даже если это не так, избегайте переопределения.
Один из атрибутов свойства undefined является недоступным для записи.
Но если я сделаю:
var undefined = 'hello';
var test = undefined;
console.log(typeof test);
//string
Означает ли это, что я могу перезаписать значение undefined
? Что произойдет, если кто-то это сделает? Должен ли JavaScript предупредить об этом?
javascript
typeof
pmiranda
источник
источник
typeof test === "undefined"
)typeof undefined
возвращается"undefined"
при нормальных обстоятельствах."undefined"
это строка. Вопрос не в том, чтоtypeof (typeof undefined)
оценивать. Это спрашивает, чтоtypeof undefined
оценивает. Он возвращается"undefined"
, а не"string"
typeof ______
- это выражение, которое оценивается как строка, содержащая тип______
. Вы неправильно поняли вопрос.Ответы:
Удаленный комментарий Эми дает решение. Вы создаете переменную с именем
undefined
, и она не работает, если вы делаете свои фрагменты в глобальной области видимости:Но это эффективно работает, если вы делаете это в локальной области, где undefined больше не ссылается на глобальную переменную:
Чтобы предотвратить эту ошибку, вы можете использовать
'use strict';
директиву:Если вы пишете код, в котором вы не можете контролировать, где он будет выполняться (например, библиотека, встраивание и т. Д.), Будет хорошим вариантом использовать IIFE, что делает его таким образом, чтобы вы могли гарантировать, что undefined всегда будет правильным / пригодным для использования. Вот пример:
Все мои тесты были выполнены с использованием Firefox 72.0b10 (64 бита) в Ubuntu, и результат для первого фрагмента может отличаться в старом браузере.
источник
let indefinido= dataArray( (a) => (anotherArray.includes(someName)));
мы проверяли, была ли эта переменная 'undefined' (результатfind
без найденных элементов) или нет. Затем он перевелindefinido
наundefined
я увидел, что я тестирую его на Chrome и Edge, видя некоторую разницу. Вот почему я пришел сюда, чтобы спросить мнение остальных, потому что я тоже учусь.void 0
Источник https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined
undefined
это не защищены , следовательно, можно присвоить ему новое значение.Когда вы не используете,
strict mode
вы по сути создаете переменную, вызываемуюundefined
в локальной области, и присваиваете ейstring
значение.undefined
является свойством глобального объекта . Начальное значение undefined является примитивным значениемundefined
.use strict
поможет предотвратить эту ошибку в глобальной области, хотя она все еще может быть перезаписана в локальной области.Если вы хотите быть более безопасным, вы должны использовать
void 0
вместоundefined
которого всегда возвращаетсяundefined
.источник
undefined
, прочитав ее в качестве аргумента. Поскольку IIFE никогда не передавал никаких аргументов, они будутundefined
в нем. Например((undefined) => console.log(typeof undefined))()