Дано:
console.log(boo); this outputs undefined
Учитывая:
var boo = 1;
console.log(boo); this outputs 1
После определения boo и установки 1, как я могу затем reset boo, так что console.log выводит undefined?
Спасибо
Дано:
console.log(boo); this outputs undefined
Учитывая:
var boo = 1;
console.log(boo); this outputs 1
После определения boo и установки 1, как я могу затем reset boo, так что console.log выводит undefined?
Спасибо
delete boo
Не используйте var boo = undefined
. undefined - это просто переменная, и если кто-то устанавливает undefined = "hello"
, тогда вы будете получать привет везде:)
EDIT:
null не был таким же, как undefined. удалил этот бит.
Чтобы надежно установить переменную boo
в undefined
, используйте функцию с пустым выражением return
:
boo = (function () { return; })();
После выполнения этой строки кода typeof(boo)
оценивается до 'undefined'
, независимо от того, установлено ли глобальное свойство undefined
на другое значение. Например:
undefined = 'hello';
var boo = 1;
console.log(boo); // outputs '1'
boo = (function () { return; })();
console.log(boo); // outputs 'undefined'
console.log(undefined); // outputs 'hello'
EDIT Но см. также @Colin более простое решение!
Такое поведение является стандартным еще в ECMAScript 1. Соответствующая спецификация частично заявляет:
Синтаксис
return
[no LineTerminator here] Expression;Семантика
Оператор
return
заставляет функцию прекратить выполнение и вернуть значение вызывающему. Если выражение не указано, возвращаемое значениеundefined
.
Чтобы просмотреть исходные спецификации, обратитесь к:
Для полноты я приложил краткое резюме альтернативных подходов к этой проблеме, а также возражения против этих подходов на основе ответов и комментариев, высказанных другими респондентами.
undefined
в boo
boo = undefined; // not recommended
Хотя проще назначить undefined
на boo
напрямую, undefined
не является зарезервированным словом, а может быть заменено на произвольное значение, такое как число или строку.
boo
delete boo; // not recommended
Удаление boo
полностью исключает определение boo
, а не присваивает ему значение undefined
, и даже тогда работает только, если boo
глобальное свойство.
Используйте оператор void
. Он будет оценивать это выражение, а затем возвращать undefined
. Идиоматично использовать void 0
для назначения переменной undefined
var boo = 1; // boo is 1
boo = void 0; // boo is now undefined
Подробнее здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/void
Вы можете просто назначить переменной значение undefined:
boo = undefined;
В качестве альтернативы вы можете использовать оператор delete
для удаления переменной:
delete boo;
Это работает в Chrome Javascript Console:
delete(boo)
var boo = 1;
console.log(boo); // prints 1
boo = undefined;
console.log(boo); // now undefined