Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.138.204.208] |
|
Сообщ.
#1
,
|
|
|
Делаю так:
function myFunc(x); { if (x) var y = document.getElementById(x); . . . if (y) y.innerHTML = 'бла-бла-бла'; } Добавлено И заодно сюда же вопрос: как узнать, существует ли элемент с именем x ? Добавлено Вот ещё один вариант: function myFunc(x); { var y = document.getElementById(x); . . . if (y) y.innerHTML = 'бла-бла-бла'; } Добавлено Т.е. в первом случае проверяется значение x (если оно НЕпустое, то переменная y создаётся и далее идёт присвоение innerHTML). Во втором случае y проверяется элемент x; если он существует, то идёт присвоение innerHTML. |
Сообщ.
#2
,
|
|
|
Цитата Jin X @ Грамотно ли так проверять существование переменной y И да и нет. Код будет работать, но в случае y = 0, y = null, y = [] - работать не будет. if (y !== undefined) { ... } Добавлено Ой, не заметил, что y - это DOM объект. Тогда всё ок =) |
Сообщ.
#3
,
|
|
|
Погоди.
var y = document.getElementById('blabla'); alert(y); Добавлено И вот так тоже срабатывает: var y = document.getElementById('blabla'); if (y == null) alert('null'); |
Сообщ.
#4
,
|
|
|
Цитата Jin X @ выдаёт null, при этом всё работает... потому что переменная существует, но содержит null. Еслиб не существовала (вопрос же твой, цитата: "Грамотно ли так проверять существование переменной") - был бы андефайн. |
Сообщ.
#5
,
|
|
|
Так, ты же говоришь:
Цитата Serafim @ в случае y = 0, y = null, y = [] - работать не будет. |
Сообщ.
#6
,
|
|
|
Ну так 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 - ошибочна. |
Сообщ.
#7
,
|
|
|
Ок, а в первом случае, когда:
function myFunc(x); { if (x) var y = document.getElementById(x); . . . if (y) y.innerHTML = 'бла-бла-бла'; } Добавлено У меня, например, конструкция: if (y !== undefined) alert('ok!'); else alert('undefined!'); Uncaught ReferenceError: y is not defined Вот так, может? if (typeof y != 'undefined') alert('ok!'); else alert('undefined!'); |
Сообщ.
#8
,
|
|
|
Цитата Jin X @ Проверка if (y) корректна? Цитата Serafim @ Ой, не заметил, что y - это DOM объект. Тогда всё ок =) Добавлено Цитата Jin X @ Вот так, может? точно сглупил я. CoffeScript предлагает такой же вариант |
Сообщ.
#9
,
|
|
|
Помнится Дядя Боб меня научил:
if (typeof(element) != 'undefined') //exists Добавлено Цитата Jin X @ а, ну вот оно Вот так, может? |
Сообщ.
#10
,
|
|
|
Цитата Serafim @ Цитата Jin X @ Проверка if (y) корректна? Цитата Serafim @ Ой, не заметил, что y - это DOM объект. Тогда всё ок =) y - это DOM-объект только при выполнении условия if (x). А вот при НЕвыполнении y будет undefined! Uncaught ReferenceError: y is not defined |
Сообщ.
#11
,
|
|
|
ты же сам сказал, что null, а не undefined
Цитата Jin X @ выдаёт null, при этом всё работает... Добавлено Короче, проверять наличие всегда стоит так: typeof some !== "undefined" && some !== null Обычно в любых вопросах по "микроалгоритмам" JS я обращаюсь к кофейной реализации, там много всяких приёмчиков, которые упрощают жизнь, в том числе и данный случай с проверкой: http://coffeescript.org/#try:some%20%3D%20...7Bsome%3F%7D%22 |
Сообщ.
#12
,
|
|
|
Цитата Serafim @ ты видишь, что там 2 разных примера?ты же сам сказал, что null, а не undefined в первом будет undefined, во втором ( var y = document.getElementById(x); ) = null, если элемента с именем x не сущестует. |
Сообщ.
#13
,
|
|
|
Цитата Jin X @ ты видишь, что там 2 разных примера? Не обратил внимание, что там другая переменная Добавлено Если аргумент не задан, то очевидно undefined, что, учитывая замечание fatalist - проверяется с помощью typeof x !== 'undefined' && x !== null. y возвращает либо DOM, либо null, что проверяется либо точно так же, либо как ты написал |