Почему в  JavaScript срабатывает else?
Первый код вернет индекс только, если первый элемент в массиве будет соответствовать условию. Иначе на первом элементе сработает return -1; и цикл завершится.
И вообще используйте лучше Array.prototype.findIndex из ECMAScript 6, тем более, что в Fx25 он уже реализован нативно:if(!Array.prototype.findIndex)
    Array.prototype.findIndex=function(predicate) {
		var list=Object(this);
		var length=list.length>>>0;//ES.ToUint32
		if(length===0)
			return -1;
		if(typeof predicate !== "function")
			throw new TypeError("Array#findIndex: predicate must be a function");
		var thisArg=arguments[1];
		for(var i=0, value; i<length && i in list; i++){
			value=list[i];
			if(predicate.call(thisArg, value, i, list))
				return i;
		}
		return -1;
	}