2017-01-14 12 views
0

Ich habe einen Code geschrieben, der sich auf die Generierung von Zufallszahlen bezieht, und ich würde den Namen des Benutzers zu dem Satz hinzufügen, der vom Skript erzeugt wurde.Warum würde "null" funktionieren, aber nicht null?

Der Benutzer gibt seine Antwort mit einer Eingabeaufforderung ein. Ich wollte wissen, wie man nach null überprüft, also testete ich dies mit der Antwort, die von mehreren Quellen auf Stack Overflow gegeben wurde. Es funktioniert jedoch nicht für null. Kurioserweise funktioniert es, wenn null als Zeichenfolge eingegeben wird: "null". Ich habe immer wieder gelesen, dass null kein String ist, also warum sollte das funktionieren?
Mein Code für den Test ist unten:

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Check</title> 
    <script> 
     var name = prompt("What's up?"); 
     function check() { 
     if (name === null) { 
      document.write("null"); 
     } 
     } 
    </script> 
    </head> 
    <body id="body" onload="check()"> 
    </body> 
</html> 
+1

ich das Problem jetzt sehe ... ändern 'Namen 'zu etwas anderem, weil' name' eine Fenstereigenschaft ist, die dich durcheinander bringt !!! –

Antwort

2

Wenn jemand Arten der Eingabe, es durch das Skript als String empfangen wird. Wenn also jemand null eingibt, wird dies in "null" übersetzt, d. H. Eine Zeichenkette mit dem Wert null. Wenn Sie also versuchen, es mit dem Wert null auszuwerten, funktioniert es nicht. Wenn Sie es jedoch für die Zeichenfolge "null" auswerten, wird es übereinstimmen.

BEARBEITEN: Wenn Sie dem Benutzer nicht erlauben möchten, null oder andere schädliche Werte einzugeben, erstellen Sie eine Liste solcher Zeichenfolgen und überprüfen Sie diese. Behandle sie als String-Werte

Die Funktion wird ausgeführt, wenn Sie auch auf Cancel drücken, aber da Sie den Vorgang abbrechen, wird der Wert von name auf "null" gesetzt. So funktioniert die Aufforderungsfunktion. https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt

+0

Um die Antwort von poushy hinzuzufügen, müssen Sie prüfen, ob der String leer ist und nicht 'null' - https://jsfiddle.net/orrLqtfm/. –

+1

Sie sollten immer noch nach 'null' suchen, um zu testen, ob die Schaltfläche' cancel' gedrückt wurde –

+0

Wenn Sie dem Benutzer nicht erlauben möchten, null oder andere schädliche Werte einzugeben, erstellen Sie eine Liste solcher Zeichenfolgen und überprüfen Sie diese. Behandle sie als String-Werte. – poushy

0

Die Frage ist rein die Wahl des Variablennamen ... dh name

der Code mit (fast) alle anderen Variablennamen funktionieren wird „wie erwartet“

var name = ... im globalen Bereich ist im Wesentlichen das gleiche wie window.name = ...

Jetzt ist window.name als der Name des Fensters definiert ... Dies ist normalerweise eine leere Zeichenfolge. wenn Sie ein Fenster window.open, einen Namen zu geben, die window.name wird dieser Wert in dem neuen Fenster wird nun

, die Zuordnung null zu window.name tatsächlich in window.name == 'null' führen, da window.name keine nicht-String-Typ sein kann. In der Tat Zuordnung führt jeden nicht-String-Wert zu window.name in window.name mit dem ".toString()" Wert

versuchen

window.name = true; // window.name will be the string "true"; 
window.name = {key: "value"}; // window.name will be the string "[object Object]"; 

etc

Verwandte Themen