mindkilla,
 1) потому что:
num = Math.floor(Math.random() * ((b - a)+a));//создать какое-то число
if (mapTrue[num]) continue;//если такое число есть то пропустить эту итерацию
mapTrue[num] = true;//поставить флаг что такое-то число есть
2)
	
	| Сообщение от mindkilla | 
	| а с ними выборка получается на больше чем нужно | 
	
может быть меньше? ибо 
Math.floor(Math.random() * ((b - a)+a))
 никогда не будет больше b, тем более что это идентично 
Math.floor(Math.random() * b)