Si j'ai bien compris, ta fonction verificationCoherence() permet de vérifier que le cercle associé ne dépasse pas du canvas et tu utilises la fonction isFinite afin de savoir si la valeur est un nombre ?
Alors attention, je pense que isFinite ne fait pas ce que tu veux, elle te permet de déterminer si l'argument est fini. Or en javascript, null, qui n'est pas un nombre, est considéré comme fini ! Idem pour une string vide "" !
A ma connaissance il n'y a pas de fonction toute faite qui le permette, il te faudrait la créer toi même
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
ce qui marche tout de suite mieux

Le problème dans ton cas c'est que tu traites les valeurs une par une. Or pour l'inclusion du cercle, tu es obligé de connaître les 3 valeurs qui définissent le cercle.
Globalement, si tu pars sur cette structure, tu vas vites foncer dans le mur (c'est pas méchant hein).
Tu utilises une boucle pour faire deux choses, parcourir chaque valeur et tester leur cohérence. Or je sais pas si tu vois le truc mais t'as une condition qui est finie au bout de 3 itérations (une pour x, une pour y et une pour r) et une qui peut ne jamais finir.
C'est pour ça que je te conseille de ne pas te prendre la tête et de repartir sur un truc plus simple et plus efficace:
var x = y = r = null;
var donnees = null;
do {
donnees = prompt("Entrez les valeurs x, y et r")
donnees = donnees.split(" ")
x = donnees [0];
y = donnees [1];
r = donnees [2];
} while(!isNumeric(x) && !isNumeric(y) && !isNumeric(r) && verificationCoherence(x, y, r))
Le do-while est un while qui itère au moins une fois