Comment détecte-t-il un résultat nul de name = prompt () en JavaScript?

Considérez ce code:

var name = prompt("What is your name", "Anonymous"); if (name == null) { alert("detected null"); name = "Anonymous"; } alert("Hello " + name); 

Je crois comprendre qu'en cliquant sur [Annuler] ou en appuyant sur la touche [Échapper], la fonction JavaScript window.prompt(text, [default]) renvoie null (ou peut-être undefined dans les anciennes versions d'IE)

Lorsque j'exécute le code ci-dessus dans Firefox, l'invite attendue apparaît. Cependant, lorsque j'appuie sur [Échapper], je ne vois jamais le message «détecté nul» (et la variable de nom n'est pas définie sur «Anonyme»). C'est comme si la variable de name n'était pas définie sur null . Fait intéressant, la dernière alerte Affiche "Hello null".

J'ai essayé d'échanger le name == null vérification name == null avec le name === null avec le même comportement.

Comment détecte-t-il null en JavaScript?

Remarque: j'essaie vraiment de détecter une chaîne nulle, pas une chaîne vide.

La fonction prompt() retourne null lorsque l'utilisateur appuie sur l'échappement, comme décrit dans la section API de l'application Web du dernier HTML 5 Working Draft :

  1. Si l'utilisateur annule, retournez null; Sinon, renvoyez la chaîne avec laquelle l'utilisateur a répondu.

Il suffit de vérifier le result === null ou result == null , comme vous l'avez fait.

Le comportement que vous rencontrez n'a pas à voir avec prompt() . C'est parce que vous essayez d'utiliser le name la variable dans une portée globale. Vous ne déclarez pas vraiment une nouvelle variable. Vous réutilisez la propriété global window.name , qui est automatiquement convertie en chaîne:

 var nameNumber = 21; var name = 21; document.write([typeof nameNumber, typeof name]); // number,string