Я сейчас вчитался внимательно...
return как правило прерывает цикл.
Как раз при первом цикле происходит перескок на событие после else, а там return
function haschip(x,y){
for(var i=0;i<x;i++){
for(var j=0;j<y;j++){
if (pl_list_1[i][j].chip === true){
alert(pl_list_1[i][j].chip);
return true;
}else {
alert(pl_list_1[i][j].chip);// Каждый цикл будет false пока не наткнётся на true
//return false;
}
}
}
return false; //предлагаю сюда вынести. Хотя не вижу в этом смысла вообще использовать(так на заметку)
}