Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.05.2018, 11:09
Аспирант
Отправить личное сообщение для Булат Азат улы Посмотреть профиль Найти все сообщения от Булат Азат улы
 
Регистрация: 07.09.2016
Сообщений: 83

Переменная с "new Audio()" всегда "undefined".
Всех приветствую. Хочу проверить, содан ли "new Audio()" и записан ли в переменную. Если еще не создан - создать его и показать блок с аудио-плеером (т.е. при открытии страницы с аудио проигрыватель у меня будет скрытым, и при первом клике на любую аудио этот блок у меня откроется и тут же создастся аудио()).
Хотел я это сделать следующим образом:
$("#playPause").click(function(){
	if(typeof audio === "undefined"){
		$("#audioPlayer").show(100);
		var audio = new Audio();
		audio.autoplay = false;
		audio.loop = false;
		audio.volume = 0.5;
		audio.src = '001.mp3';
		$(this).text("\u23f8");
		audio.play();
	}else{
		if($(this).text() == "\u25b6") {
			$(this).text("\u23f8");
			audio.play();
		} else {
			$(this).text("\u25b6");
			audio.pause();
		}
	}
	
});

И почему-то у меня и после выполнения первого условия (ведь в начале (до первого клика) переменной "audio" ещё нет), при втором клике всё равно выполняется первое условие, хотя и переменная "audio" уже создана, проигрывается аудио.
Почему так происходит? Читал я, что с проверкой наличия переменной в яваскрипте всё сложнее, чем в PHP, в котором просто написал if(isset($audio)){} - и всё правильно понимается кодом. А в Яваскрипте есть какие-то нюансы...
Ответить с цитированием
  #2 (permalink)  
Старый 06.05.2018, 11:28
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

что то вас тут много непонятного

typeof audio === "undefined"

если undefined в кавычках это уже обычная строка

new Audio() это object.
Ответить с цитированием
  #3 (permalink)  
Старый 06.05.2018, 12:01
Аспирант
Отправить личное сообщение для Булат Азат улы Посмотреть профиль Найти все сообщения от Булат Азат улы
 
Регистрация: 07.09.2016
Сообщений: 83

j0hnik,
На счет "undefined" я тоже думал, и пробовал ставить без кавычек. Просто на сайтах при проверках пишут с кавычками. Например, тут. Поэтому и написал в кавычках. Но без них такая же проблема.
В общем, понял, что "undefined" нужно использовать без кавычек - буду делать так.
Сообщение от j0hnik Посмотреть сообщение
new Audio() это object.
Его же я всё равно присваиваю переменной? Получается же, переменная всё равно появляется? В этом случае наличие переменной проверяется как-то иначе?
Ответить с цитированием
  #4 (permalink)  
Старый 06.05.2018, 12:21
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

var audio;
$("#playPause").click(function(){
if(audio === undefined){
$("#audioPlayer").show();
audio = new Audio();


вот так попробуйте, не нужно обращаться к переменным до их объявления, и тип вам по сути не нужен, вам нужно просто знать undefined или нет
Ответить с цитированием
  #5 (permalink)  
Старый 06.05.2018, 20:24
Аспирант
Отправить личное сообщение для Булат Азат улы Посмотреть профиль Найти все сообщения от Булат Азат улы
 
Регистрация: 07.09.2016
Сообщений: 83

j0hnik,
Так работает, спасибо!
То есть, как я понял, правильнее и по науке будет сначала объявлять переменные, а потом уже прсваивать им переменные? Как, например, в Паскале?
Ответить с цитированием
  #6 (permalink)  
Старый 06.05.2018, 20:36
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Булат Азат улы,
Нет, if(audio) обращение к переменной. если она не объявлена вылетит ошибка.
Объявление и сразу же инициализация нормальная практика в js.
Ответить с цитированием
  #7 (permalink)  
Старый 06.05.2018, 21:21
Аспирант
Отправить личное сообщение для Булат Азат улы Посмотреть профиль Найти все сообщения от Булат Азат улы
 
Регистрация: 07.09.2016
Сообщений: 83

j0hnik,
Понял, спасибо!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
почему переменная name всегда string ? vitek-82 Общие вопросы Javascript 3 15.06.2017 18:23