Dado um arquivo de imagem, como verificar se ele existe usando apenas javascript ?

Eu consegui pensar em pelo menos três formas de fazer isso.

Verificando com AJAX

<script type="text/javascript">
function is_img(file) {
	var ajax = new XMLHttpRequest();

	ajax.open("GET",file,true);
	ajax.send();

	ajax.onreadystatechange = function() {
		if (ajax.readyState == 4){
			var jpg = ajax.responseText;

			if(ajax.status===200) {
				console.log("A imagem " + file + " existe");
			} else {
				console.log("A imagem " + file + " NAO existe");
			}
		}
	}
}
is_img("imagem-garfield.jpg");
is_img("imagem-garfield-2.jpg");
</script>

A propriedade status do objeto ajax existe exatamente para isso. Caso não exista ela retorna 404, caso exista retornará 200, ou então 304(not modified) dependendo de como você serve imagens com o teu servidor.

Verificando com new Image();

<script type="text/javascript">
function is_img(file) {
	var img = new Image();
	img.src = file;
	img.onload = function() {
		console.log("A imagem " + file + " existe");
	}
	img.onerror = function() {
		console.log("A imagem " + file + " NAO existe");
	}
}
is_img("imagem-garfield.jpg");
is_img("imagem-garfield-2.jpg");
</script>

Outra possibilidade é usar aquele truque que conhecemos para fazer preload de arquivos de imagem, usando o objeto Image()

Aqui é bem simples, se a imagem responder no evento onload(), então ela existe, caso não, disparará o evento onerror, ai sei que deu algo errado.

Verificar com document.createElement

Aqui o truque para saber se o arquivo de imagem existe ou não, é o mesmo do método acima. Usando os eventos onload, e onerror. Porém o resource agora é criado com um elemento imagem, e não com o objeto.

<script type="text/javascript">
function is_img(file) {
	var img = document.createElement('img');
	img.src = file;

	img.onload = function() {
		console.log("A imagem " + file + " existe");
	}
	img.onerror = function() {
		console.log("A imagem " + file + " NAO existe");
	}

}
is_img("imagem-garfield.jpg");
is_img("imagem-garfield-2.jpg");
</script>