2017-06-25 2 views
-3

Ich sehe Menschen diesesÜberprüfung Variable typeof und Länge

if(typeof myVar === 'string' && myVar.length > 0) { 

} 

tun, warum nicht nur if(myVar) {} ??

Ich benutze typeof zu debuggen, nie in der realen App zu verwenden.

+0

Was ist, wenn der Wert von 'myVar'' 18' oder eine Objektreferenz ist? Dieser Test stellt sicher, dass der Wert eine nicht leere Zeichenfolge ist. Nur testen, um zu sehen, ob es wahr ist - y könnte zu einem Fehler führen. – Pointy

+0

Offenbar, weil ihre 'myVar' nicht immer eine Zeichenfolge ist. Was natürlich nicht die beste Vorgehensweise ist, aber was können wir tun? – Bergi

+0

Welche Leute? Wo machen sie das? Hast du sie gefragt warum? Woher sollen wir wissen, dass wir nicht die Autoren dieses Codes sind? – Bergi

Antwort

0

if (myVar) {}), überprüft nicht, ob der Wert von myVar Zeichenfolge ist oder nicht

wo als typeof myVar === 'string' Sie das tun können.

myVar.length > 0 verwendet, um zu überprüfen, dass myVar einige Zeichen hat, aber es ist nicht idiotensicher, da auch leere Leerzeichen als Zeichen zählen. Zum Beispiel:

let x = '';

dann ist x.length 2

Hoffnung, das hilft.

+0

Warum wichtig "===" verwenden, um typeof Ergebnis mit einer Konstante zu vergleichen? – sarkiroka

+0

können Sie auch == verwenden, um es zu vergleichen. Da js locker geschrieben ist, ist es besser, === als == überall zu verwenden, aber == funktioniert an dieser Stelle des Typs. Wie Sie sicher sind, gibt typeof eine Zeichenkette zurück. – Neovire

+0

besser überall außer das :) und was ist mit der Geschwindigkeit? Ich habe gemessen und erreiche 40-50% Geschwindigkeit bis zur nicht-sicheren Gleichheit. – sarkiroka

0

Dies ist eine Polemik.

Wenn Sie Ihren Code schreiben, und Sie wissen, „myVar ist eine Zeichenfolge“ dann Ihre Aussage ist goog genug

if(myVar){} 

Aber wenn mnks Code ruft, oder jemand, der nicht Sinn der erwarteten Datentypen hat , müssen Sie den Typ der Variablen und andere Dinge überprüfen. In diesem Fall müssen Sie === anstelle von == verwenden, denn was passiert, wenn die Funktion typeof einen Nicht-String-Wert zurückgibt?

Verrückte Welt