Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Переменная с "new Audio()" всегда "undefined". (https://javascript.ru/forum/misc/73679-peremennaya-s-new-audio-vsegda-undefined.html)

Булат Азат улы 06.05.2018 11:09

Переменная с "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)){} - и всё правильно понимается кодом. А в Яваскрипте есть какие-то нюансы...

j0hnik 06.05.2018 11:28

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

typeof audio === "undefined"

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

new Audio() это object.

Булат Азат улы 06.05.2018 12:01

j0hnik,
На счет "undefined" я тоже думал, и пробовал ставить без кавычек. Просто на сайтах при проверках пишут с кавычками. Например, тут. Поэтому и написал в кавычках. Но без них такая же проблема.
В общем, понял, что "undefined" нужно использовать без кавычек - буду делать так.
Цитата:

Сообщение от j0hnik (Сообщение 484730)
new Audio() это object.

Его же я всё равно присваиваю переменной? Получается же, переменная всё равно появляется? В этом случае наличие переменной проверяется как-то иначе?

j0hnik 06.05.2018 12:21

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


вот так попробуйте, не нужно обращаться к переменным до их объявления, и тип вам по сути не нужен, вам нужно просто знать undefined или нет

Булат Азат улы 06.05.2018 20:24

j0hnik,
Так работает, спасибо!
То есть, как я понял, правильнее и по науке будет сначала объявлять переменные, а потом уже прсваивать им переменные? Как, например, в Паскале?

j0hnik 06.05.2018 20:36

Булат Азат улы,
Нет, if(audio) обращение к переменной. если она не объявлена вылетит ошибка.
Объявление и сразу же инициализация нормальная практика в js.

Булат Азат улы 06.05.2018 21:21

j0hnik,
Понял, спасибо!


Часовой пояс GMT +3, время: 04:53.