Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему alert не срабатывает для несуществующей переменной? (https://javascript.ru/forum/misc/30765-pochemu-alert-ne-srabatyvaet-dlya-nesushhestvuyushhejj-peremennojj.html)

Почемучкин 15.08.2012 06:19

Почему alert не срабатывает для несуществующей переменной?
 
Почему alert не срабатывает для несуществующей переменной?
javascript: alert(qetgeeqqre);

Вставьте это в адресную строку и запустите.

Насколько мне помнится, раньше это работало и выдавало undefined в качестве результата в окошке.
Firefox 13.0.1 - может произошли какие-то изменения в безопасности?
Сейчас работает только если предварительно описать переменную:
javascript: var qetgeeqqre; alert(qetgeeqqre);

Покажет "undefined" как и ожидается.

B@rmaley.e><e 15.08.2012 08:34

Странно Вам помнится.
alert(qetgeeqqre);
Вполне ожидаемая ошибка
Цитата:

error: Undefined variable: qetgeeqqre
. Зато если определить переменную, но не задать ей значения, она будет иметь значением undefined.
var qetgeeqqre; alert(qetgeeqqre);

Почемучкин 15.08.2012 09:26

Возможно я перепутал с несуществующими свойствами DOM-объектов. Но мне кажется, и переменные в прежних версиях firefox можно было так проверять.

Хорошо, а как же узнать - была ли объявлена переменная или нет (существует ли она)?

B@rmaley.e><e 15.08.2012 09:32

Если нужно проверить существование глобальной переменной — то так:
var a;
alert('a' in window) // объявлена
alert('b' in window) // не объявлена

Но в случае локальных переменных так уже не получится
(function () {
  var a;
  alert('a' in window)
  alert('b' in window)
})()

В общем случае, достаточно будет проверки на undefined, т.к. вряд ли для Вас принципиально, объявлена ли переменная или же инициализирована undefined'ом.
alert(typeof someVariable === 'undefined')

ksa 15.08.2012 09:40

Цитата:

Сообщение от Почемучкин
а как же узнать - была ли объявлена переменная или нет (существует ли она)?

Как вариант...

var b;
var c=1;
alert(typeof a);
alert(typeof b);
alert(typeof c);

Severtain 15.08.2012 09:53

Почемучкин,
Все правильно! Переменной нету, оно и не должно возвращать другое значение! Благодаря этому и определяем существование переменной, объекта!

Почемучкин 15.08.2012 11:23

Цитата:

Сообщение от Severtain (Сообщение 197695)
Почемучкин,
Все правильно! Переменной нету, оно и не должно возвращать другое значение! Благодаря этому и определяем существование переменной, объекта!

В том и проблема была, что скрипт ничего не возвращал, а вместо этого прерывал работу

Спасибо ответившим!

Почемучкин 15.08.2012 11:39

Еще вопрос: можно ли удалить переменную так, чтобы ни следа не осталось? То есть чтобы она стала undefined и необъявленной при этом?

ksa 15.08.2012 11:41

Цитата:

Сообщение от Почемучкин
и необъявленной при этом?

Если переменная объявлена как

var val;


она останется таковой. Т.е. "удалить объявление" переменной нельзя.

ksa 15.08.2012 11:52

Цитата:

Сообщение от Почемучкин
можно ли удалить переменную

http://javascript.ru/delete


Часовой пояс GMT +3, время: 18:42.