L'espionnage de la marine américaine (US Naval Intelligence) avec l'aide des Britanniques et des Hollandais avait essentiellement percé une partie des codes utilisés par la marine japonaise (JN-25, un code de cryptage) depuis quelques temps déjà. Malgré la modification de ce code juste avant l'attaque contre Pearl Harbor, les progrès de son décryptage étaient réels, au point d'envisager d'utiliser les informations ainsi obtenues pour arrêter les opérations japonaises.
Toutefois, un élément du code (l'emplacement AF) restait inconnu. Certains pensaient qu'il s'agissait de Midway, mais il y avait controverse et il pouvait s'agir des îles Aléoutiennes. Il n'y avait malheureusement aucun moyen de clore le débat avec les seuls éléments cryptographiques. Un jeune officier, Jasper Holmes, à la station Hypo, fit une suggestion brillante pour lever le doute. Il demanda au commandant de la base de Midway d'annoncer —en clair— à la radio qu'il y avait une urgence sanitaire —l'eau potable venait à manquer à cause d'un accident à l'usine d'épuration. Un message codé japonais ne tarda pas à noter que "A.F." avait un problème d'eau potable et que les forces d'attaque devaient en tenir compte. La conclusion logique immédiate était donc qu'A.F. et Midway ne faisaient qu'un et que l'opération militaire à venir s'y déploierait.
Toutefois, le décodage de JN-25 était très lent et ce n'est qu'à la dernière minute que l'amiral Chester Nimitz eut assez d'éléments pour mettre en place un piège contre les forces qui allaient attaquer Midway. Il rappela les porte-avions de Fletcher du sud-ouest du Pacifique et les chantiers navals de Pearl Harbor réparèrent en temps record le Yorktown—gravement endommagé pendant la bataille de la mer de Corail—lui permettant de rejoindre la nouvelle bataille navale.
En 72 heures seulement, le Yorktown fut transformé d'une épave à peine flottante en un porte-avions opérationnel (même s'il restait significativement affaibli). Son pont d'envol était rebouché plus que réparé, sa structure interne était étayée et ses avions étaient remplacés par ceux de la base navale. Il faut admettre que pour disposer de son troisième et dernier porte-avions, l'amiral Nimitz ignora totalement toutes les règles et procédures. Par exemple, les réparations n'étaient pas encore finies quand le navire appareilla au son de « California, Here I Come » (Californie, me voici).
Pendant ce temps, à Kure, le Shokaku, lui aussi gravement endommagé lors de la bataille de la mer de Corail, attendait ses réparations tandis que le Zuikaku devait reconstituer son groupe aérien, décimé pendant la bataille, privant ainsi la flotte japonaise de ses deux meilleurs porte-avions. L'équilibre des forces eût été très différent si les États-Unis n'avaient aligné que l'Enterprise et le Hornet, sous les ordres de l'amiral Raymond A. Spruance, face aux Soryu, Hiryu, Akagi, Kaga, Shokaku et Zuikaku.
Les forces américaines se retirèrent rapidement après une victoire décisive. La perte de quatre porte-avions porta un coup d'arrêt à l'expansion de l'Empire japonais dans le Pacifique et le mit en position défensive seulement six mois après l'attaque contre Pearl Harbor. L'amiral Yamamoto avait fait la prédiction à ses supérieurs que le Japon aurait le dessus pendant six mois à un an avant d'être débordé par les ressources américaines. Il avait été terriblement exact.
Une première erreur japonaise est flagrante avant même la bataille proprement dite : la trop grande confiance en la réussite de leur mission, et le fait qu’ils sous-estimèrent l’ennemi. En effet, ils comptaient sur la présence de 2 porte-avions américains seulement, le Yorktown « ayant été coulé » à la bataille de la mer de Corail. De plus, pour confirmer la situation de l’US Navy, une reconnaissance aérienne devait avoir lieu sur Pearl Harbour, et un cordon de sous-marins devait être mis en place à proximité des eaux hawaïennes, ce pour détecter les mouvements américains. Et là, premiers déboires : la reconnaissance en question fut annulée, ce qui n’inquiéta nullement le haut commandement qui ne prévint cependant pas Nagumo de ce fait. Quant aux sous-marins, ils traînèrent en route et parvinrent à leur lieu de patrouille avec 24h de retard… ce qui fit qu’ils ratèrent (de peu) la flotte américaine.
Dès le 3 juin au matin, le convoi des transports de troupes nippons faisant route vers Midway est repéré. Immédiatement, 15 B25 décollent et attaquent ledit convoi. Aucun navire n’est touché contrairement aux revendications, mais l’effet est désastreux sur les Japonais qui pensaient bénéficier de la surprise… au soir, des Catalina attaquent à leur tour, armés de torpilles, et mettent un coup au but sur un transport. Plus au nord ce même jour débutent les combats des Aléoutiennes sous une météo peu favorable. La diversion ne marchera évidemment pas, les Américains étant au courant des plans japonais.
Le 4 juin au matin, le décor est placé et les protagonistes sont prêts au combat. Vers 4-5h, des avions de reconnaissances décollent de part et d’autre, mais du côté japonais, un avion décolle en retard tandis qu’un autre doit faire demi-tour. Un premier tournant, même si aucun ne le sait à ce moment, car ces deux avions là auraient dû suivre une trajectoire qui les aurait fait croiser la flotte américaine. Malchance ? Peut-être mais la négligence fut de ne pas les remplacer par d’autres… À 5h, 36 Zéros, 36 bombardiers en piqué et 36 bombardiers/torpilleurs japonais décollent. Après la détection du raid au radar, tous les avions présents sur l’atoll décollent : 6 Grumman TBF-1 Avenger et 4 Martin B-26 Marauder torpilleurs, 27 Douglas SBD-2 Dauntless et 12 Vought SB2U-3 Vindicator (bombardiers en piqué), 17 B-17 ainsi que 20 F2A3 Buffalo et 5 F4F-3 Wildcat (chasseurs chargés de la défense). Les chasseurs interceptent les japonais et revendiquent quelques succès mais au prix de lourdes pertes face aux zéros : 13 Buffalos et 2 Wildcats sont abattus, contre 3-4 avions japonais. Ceux-ci bombardent efficacement et causent de lourds dégâts à la base, mais une seconde vague s’annonce nécessaire.
Pendant ce temps, les appareils américains ayant décollé avant l’attaque atteignent la flotte japonaise : 5 des Avengers et 2 Marauders sont détruits, sans succès, les B-17 s’en tirent mais ratent lamentablement leurs cibles (malgré des revendications contraires). Entre-temps les Nippons repèrent la flotte américaine mais subissent encore l’assaut des Dauntless et Vough de Midway : 8 SBD et 3 SBU sont perdus ; aucun coup au but, malgré des revendications contraires. Les zéros ont fait un carnage sur ces appareils non escortés, mais le pire reste à venir… Après la découverte des navires américains, Nagumo hésite ; faut-il attaquer ces navires ou lancer une seconde vague sur Midway ? Le temps passe et Nagumo change plusieurs fois de décision. Lorsqu’enfin il se décide à frapper l’US Navy, les avions de la première vague sur Midway reviennent et il faut dégager les ponts. Là vient une autre faiblesse : les avions de la première vague provenaient des 4 porte-avions, alors qu’ils ne représentaient que la moitié des effectifs. Il aurait mieux valu les faire décoller de 2 porte-avions pour garder les deux autres « en réserve » pour agir contre l’US Navy si celle-ci venait à se montrer. Résultat, la totalité des porte-avions sera bloquée lorsqu’il faudra récupérer la première vague, la deuxième sera retardée et ne pourra jamais être lancée, les attaques des groupes embarqués américains survenant à ce moment crucial où les porte-avions seront vulnérables. Les premières attaques sont menées par les torpilleurs TBD Devastator. Lents, vulnérables, peu maniables et sans escorte pour 2 des 3 escadrilles concernées, ils se font massacrer. Sur 41, 35 sont perdus et ils n’obtiennent aucun coup au but en contrepartie. Cependant, ils détournent l’attention des Zéros qui, tout occupés à les abattre (au ras de la mer), ne remarquent pas l’apparition à 5 000 m d’altitude des bombardiers en piqué américain. Ceux-ci piquent sur les porte-avions au moment où les premiers appareils de la 2e vague décollent. En 2 minutes, les porte-avions Akagi, Kaga et Soryu sont durement touchés et condamnés. À 10h25, il ne reste plus que le Hiryu pour combattre. Immédiatement, celui-ci lance 18 bombardiers et 6 chasseurs. Bien qu’interceptés par les appareils de couverture américains, ils touchent le Yorktown par 3 bombes aux alentours de midi, le mettant hors de combat. Une deuxième attaque est lancée, cette fois 10 torpilleurs et 6 chasseurs, elle touchera le Yorktown avec 2 torpilles à 15h. Alors qu’une troisième vague s’apprête à décoller, les avions américains reviennent (vers 17 heures) et détruisent le Hiryu. L’escadre de Nagumo est anéantie et Yamamoto ordonne le repli. Mais deux croiseurs lourds de la Flotte de Kondo (le Mikuma et le Mogami) entrent en collision. Ralentis, ils seront pris par les américains pour des cuirassés et seront harcelés pendant deux jours avant que le Mikuma soit finalement coulé, le Mogami étant très gravement touché. Le Yorktown quant à lui est pris en remorque, mais le sous-marin japonais I-168 le repère et l’achève de torpilles, le destroyer Hammann étant coulé dans l’attaque. Avec la perte du Yorktown, le commandement passa des mains de l'amiral Fletcher à celles de l'amiral Spruance — au crédit duquel sera portée la victoire.
Dès qu'il apprit la destruction des porte-avions de la première escadre, Yamamoto ordonna à toutes ses forces de procéder à l'attaque de Midway. La bataille devait se dérouler dès le lendemain matin. Spruance de sa part, ne tenait pas à combattre de nuit avait éloigné sa flotte dans la soirée du 4. À cette nouvelle, Yamamoto décida d'annuler l'opération et ordonna le repli de toute la flotte japonaise.