Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > JavaScript, DOM/DHTML > Проверка существования переменной |
Автор: Jin X 05.05.15, 10:25 |
Делаю так: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> Грамотно ли так проверять существование переменной y (несмотря на то, что этот код работает)? function myFunc(x); { if (x) var y = document.getElementById(x); . . . if (y) y.innerHTML = 'бла-бла-бла'; } Добавлено И заодно сюда же вопрос: как узнать, существует ли элемент с именем x ? Добавлено Вот ещё один вариант: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> function myFunc(x); { var y = document.getElementById(x); . . . if (y) y.innerHTML = 'бла-бла-бла'; } Добавлено Т.е. в первом случае проверяется значение x (если оно НЕпустое, то переменная y создаётся и далее идёт присвоение innerHTML). Во втором случае y проверяется элемент x; если он существует, то идёт присвоение innerHTML. |
Автор: Serafim 05.05.15, 12:08 |
И да и нет. Код будет работать, но в случае y = 0, y = null, y = [] - работать не будет. <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> if (y !== undefined) { ... } Добавлено Ой, не заметил, что y - это DOM объект. Тогда всё ок =) |
Автор: Jin X 05.05.15, 13:07 |
Погоди. <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> выдаёт null, при этом всё работает... var y = document.getElementById('blabla'); alert(y); Добавлено И вот так тоже срабатывает: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> === тоже var y = document.getElementById('blabla'); if (y == null) alert('null'); |
Автор: Serafim 05.05.15, 13:29 |
потому что переменная существует, но содержит null. Еслиб не существовала (вопрос же твой, цитата: "Грамотно ли так проверять существование переменной") - был бы андефайн. |
Автор: Jin X 06.05.15, 15:36 |
Так, ты же говоришь: |
Автор: Serafim 06.05.15, 15:40 |
Ну так y у нас DOM-объект, а null отрицательное значение, т.е. которое и следует игнорировать. Добавлено Не будет работать в случаях: 1) var a = false || null; (т.е. ожидаешь либо false, либо null) 2) var a = false || []; 3) var a = false || 0; 4) var a = false || ''; В этих случаях проверка через if(a) ожидая, что она будет успешной только при a = false - ошибочна. |
Автор: Jin X 06.05.15, 18:05 |
Ок, а в первом случае, когда: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> Проверка if (y) корректна? Ведь, если if (x) не выполнится, переменная y не создастся. function myFunc(x); { if (x) var y = document.getElementById(x); . . . if (y) y.innerHTML = 'бла-бла-бла'; } Добавлено У меня, например, конструкция: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> вообще не работает, если y не определено!if (y !== undefined) alert('ok!'); else alert('undefined!'); Uncaught ReferenceError: y is not defined Вот так, может? <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> if (typeof y != 'undefined') alert('ok!'); else alert('undefined!'); |
Автор: Serafim 06.05.15, 21:04 |
Добавлено точно сглупил я. CoffeScript предлагает такой же вариант |
Автор: fatalist 07.05.15, 03:47 |
Помнится Дядя Боб меня научил: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> if (typeof(element) != 'undefined') //exists Добавлено а, ну вот оно |
Автор: Jin X 07.05.15, 09:44 |
Цитата Serafim @ y - это DOM-объект только при выполнении условия if (x). А вот при НЕвыполнении y будет undefined! Uncaught ReferenceError: y is not defined |
Автор: Serafim 07.05.15, 10:23 |
ты же сам сказал, что null, а не undefined Добавлено Короче, проверять наличие всегда стоит так: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> typeof some !== "undefined" && some !== null Обычно в любых вопросах по "микроалгоритмам" JS я обращаюсь к кофейной реализации, там много всяких приёмчиков, которые упрощают жизнь, в том числе и данный случай с проверкой: http://coffeescript.org/#try:some%20%3D%20...7Bsome%3F%7D%22 |
Автор: Jin X 07.05.15, 20:51 |
ты видишь, что там 2 разных примера? в первом будет undefined, во втором ( var y = document.getElementById(x); ) = null, если элемента с именем x не сущестует. |
Автор: Serafim 07.05.15, 21:04 |
Не обратил внимание, что там другая переменная Добавлено Если аргумент не задан, то очевидно undefined, что, учитывая замечание fatalist - проверяется с помощью typeof x !== 'undefined' && x !== null. y возвращает либо DOM, либо null, что проверяется либо точно так же, либо как ты написал |