Как проверить определена ли переменная на JavaScript

Раздел языка JavaScript.
Аватара пользователя
Slash
Администратор
Сообщения: 2029
Поблагодарили: 62 раза

Как проверить определена ли переменная на JavaScript

Сообщение Slash » Вт ноя 10, 2015 8:47 pm

Здравствуйте. Начну из далека :)
Сегодня мне потребовалось вывести диалоговое окно при нажатии кнопки, на JS (парсер BBcode). Диалоговое окно состоит из одного поля, куда вводится строка и двух кнопок Ok и Отмена. Это окно я хочу использовать для ввода url, пользователь нажимает BBcode URL, появляется окно, пользователь вводит адрес, затем жмет кнопку Ok, и введенный адрес появляется в textarea, уже с BBcode. Я посчитал, что это будет удобно.

Код: Выделить всё

// Назначили переменной "url" введенный адрес
var url = prompt(paste_url, '');
// Вставляем BBcode вместе с URL в textarea
obj.value = value.substr(0, start) + '[' + tag + '=' + url + ']' + url + '[/' + tag + ']' + value.substr(start);

Все просто и удобно!
Но тут я подумал о том, что пользователь может передумать вводить какой то адрес, после того, как нажмет на кнопку ( кто та может так быстро передумать? ), но теперь ему придется нажать на одну из двух кнопок (Ok или Отмена), что бы продолжить работу в редакторе, после чего в textarea будет вставлен BBcode, не важно было, что то введено или нет. Выглядит это конечно некрасиво и на мой взгляд недопустимо. Тут нужна проверка - было ли что то введено в поле или нет, то есть надо проверить переменную на пустоту.

Я знаю несколько способов, как проверить определена ли переменная на JavaScript, правда не все пробовал.
И так я делаю проверку на пустоту переменной, если переменная не пустая, сценарий вставит тег в textarea вместе с введенным адресом. Первое, что я попробовал выглядело так:

Код: Выделить всё

if (url != '')

Теперь если поле осталось не заполненным, а кнопка Ok была нажата, то в textarea ничего не попадает, но если нажать кнопку Отмена, BBcode все ровно попадает в поле редактора текста, со значением null. А это говорит о том, что данная проверка мне не подходит. Пробую ещё:

Код: Выделить всё

if (url != undefined)

И этот вариант меня не устраивает, по той же причине, что и первый.
Что первые два варианта мне не подошли - это даже хорошо, потому что я решил вставить в условие просто переменную, без всяких сравнений:

Код: Выделить всё

if (url)

Именно такая проверка прошла мою проверку ( тавтольгнул )! Теперь при пустой форме и нажатой, любой кнопки в textarea ни чего не вставляется, что мне и надо. Но я придирчив до ужаса ( наверно ) и решил попробовать ввести в поле пробел и бац в textarea попадает тег. Тут придется убирать пробелы, нашел такое решение:

Код: Выделить всё

url = url.replace(/\s+/g, '');

После этой замены хоть сто пробелов ставь, работает, как часики!
В итоге код получился таким:

Код: Выделить всё

// Назначили переменной "url" введенный адрес
var url = prompt(paste_url, '');
// Удаляем пробелы, если они есть
url = url.replace(/\s+/g, '');
// Проверяем определена ли переменная, если определена, вставляем тег
if (url)
{
    // Вставляем BBcode вместе с URL в textarea
    obj.value = value.substr(0, start) + '[' + tag + '=' + url + ']' + url + '[/' + tag + ']' + value.substr(start);
}

Конечно данный сценарий ещё допиливать и допиливать, например можно проверить корректность введенного адреса, не запрещен ли введенный адрес и так далее, но тема не об этом.

Надеюсь информация была полезной.
Спасибо за внимание.
Реклама
Аватара пользователя
Slash
Администратор
Сообщения: 2029
Поблагодарили: 62 раза

Re: Как проверить определена ли переменная на JavaScript

Сообщение Slash » Пт июн 17, 2016 3:07 pm

Ещё один вариант проверки определена ли переменная:

Код: Выделить всё

if (typeof value !== 'undefined') {
    
// Переменная определена
}; 

Вернуться в «JavaScript»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость