Имя: Пароль:
IT
Веб-мастеринг
Кто знает JavaScript, объясните нубу как узнать существует ли переменная?
0 Чейз
 
07.12.17
17:18
Кто знает JavaScript, объясните нубу как узнать существует ли переменная?
Только без Попытка - Исключение, потому что это плохо.
Решил выучить жаваскрипт, но столкнулся с такой проблемой. В интернете пишут все неправильные ответы. Может кто уже находил как это правильнее всего сделать?
1 vde69
 
модератор
07.12.17
17:20
я не силен в яве, но сдается мне, что без попытки ни как...
2 Чейз
 
07.12.17
17:23
(1) Я тоже склоняюсь к этому выводу. Но опыт 1С говорит что это некрасиво, и должен быть нормальный способ.
3 Numerus Mikhail
 
07.12.17
17:23
Что значит существует ли переменная?
Ты же код пишешь, и так должен знать, есть она или нет
4 qsunnx
 
07.12.17
17:25
window.someVariable || false

Если ищешь глобально
5 Чейз
 
07.12.17
17:26
(3) Наверное и значение переменной тоже должен я знать, раз пишу код? Но нет, в реальной жизни все не так.
6 Numerus Mikhail
 
07.12.17
17:28
(5) Значение знать не должен, да и это тут не при чем.
7 DexterMorgan
 
07.12.17
17:28
(5) я тупой 1сник, но вроде как в яве нужно явно объявлять переменные, не?
8 Чейз
 
07.12.17
17:29
(4) Спасибо!!! Хрен бы я догадался, да и вообще кто-то.
Темку можно закрыть
9 qsunnx
 
07.12.17
17:29
var someObj = { "notNull" : "12" };
someObj["null"] || false

Так по объекту можно к примеру
10 Vangiks
 
07.12.17
17:29
Есть только 3 сравнения с null и undefined дающие TRUE:

undefined == undefined;
null == null;
undefined == null;
Любые другие комбинации -  FALSE

Соответственно:

if (GlobalObj != undefined) {...}           GlobalObj = ^[ undefined | null ]

if (typeof GlobalObj != 'undefined') {...}  GlobalObj = ^[ undefined ]

На StackOverFlow. Такое не подходит?
11 v77
 
07.12.17
17:30
в node.js такое работает

if (typeof someVar == "undefined")
12 Asmody
 
07.12.17
17:30
обращение к undeclared однозначно бросает Reference Error.
typeof(undeclared) === "undefined"

но
var decl;
typeof(decl) === "undefined"
decl === undeclared
13 Чейз
 
07.12.17
17:34
(8)+
Не, щас проверил, работает только на глобальных переменках. А на переменных внутри функции не работает.
К какому объекту привязываются переменные внутри функций?
14 Чейз
 
07.12.17
17:37
(10) Нет
(11) если в someVar находится undefined, то твое условие ошибочно выдаст истину. Так что тоже не подходит
15 qsunnx
 
07.12.17
17:41
(13) Если ф-ция - это конструктор, тогда к объекту через this и new соответственно.
А иначе переменная остается в области видимости функции, к ней подхода не найти извне
16 Чейз
 
07.12.17
17:44
(15) извне и не надо. Надо изнутри проверить есть ли она вообще, не используя попытку-исключение
17 Asmody
 
07.12.17
17:59
приучайся к use strict
18 qsunnx
 
07.12.17
18:03
(16) Хм...
Ну есть например такой вариант:
var a1 = typeof(neededVar); // == 'undefined'
var neededVar = 5;

if a1 != typeof(neededVar) {

}
19 Чейз
 
07.12.17
19:03
(18) зачем это?
20 Сияющий в темноте
 
07.12.17
20:25
Если JavaScript в браузере, то все глобальные переменные - это ключи объекта window, а локальные - можно через функции получить.
21 Зума2
 
11.12.17
13:20
(0) единственный способ проверки существования переменной без всяких попыток и исключений - это проверить такое условие:

someVariable in this

Пользуйтесь на здоровье.
22 H A D G E H O G s
 
11.12.17
14:58
Как хорошо, что в нормальных ЯП такие вопросы возникают только при работе со структурами.
23 mingw
 
11.12.17
15:15
(22) Дело не в нормальности ЯП. А в нормальности использующих.
24 Вафель
 
11.12.17
15:16
но зачем вообще такая проверка нужна? или ТС куда-нибудь в фейсбук устраивается и такой вот каверзный вопрос на собеседовании