Почему иногда выходит ошибка « Uncaught TypeError: Cannot read property '3' of undefined »?
Кажется, кто-то не в курсе, что индексация массивов начинается с нуля.
Ну нет у вас ни в одном из массивов элемента с индексом 10, нет. Соответственно, когда lon принимает значение 10, map[lon] оказывается undefined, отсюда и ошибка.
У вас рандом начинается с 1 до 10 включительно, а элементов у вас 10 (с нуля по 9). 
Вот так https://jsfiddle.net/j1qxmbf7/// Расстановка кораблей 1*1
		for (var i = 0; i < 4; i++) {
			var lat = getRandom(0, 9)
			var lon = getRandom(0, 9)
			
			while ( map[lon][lat] == 's' ){
				lat = getRandom(0, 9)
				lon = getRandom(0, 9)
				console.log('Есть совпадение!')
			}
			map[lon][lat] = 's'
		}