suchen
HeimWeb-Frontendjs-TutorialAutomatische Konvertierung in der realen Welt

Automatic Type Conversion In The Real World

Kernpunkte

    Die automatische Konvertierung von
  • JavaScript ist sowohl ein Vorteil als auch ein Nachteil in verschiedenen Situationen. Als Kernfunktion konvertiert es Daten in einen erwarteten Typ, wenn ein Bediener oder eine Anweisung einen bestimmten Datentyp erwartet.
  • Gemäß dem Konvertierungsergebnis werden JavaScript -Werte als "wahre Werte" oder "falsche Werte" bezeichnet. Es gibt sechs falsche Werte: false, undefined, null, 0, "", NaN (leere Zeichenfolge) und
  • (nicht nummer). Alle anderen Werte werden als wahr angesehen.
  • Wie Typumwandlungen die Bewertung beeinflussen, muss sorgfältig in Betracht gezogen werden, um Fallstricke zu vermeiden. Wenn beispielsweise die Standardwerte für optionale Parameter definiert werden, muss beispielsweise die Wahrheit bekannter Daten sichergestellt werden, um einen Fehler zu verhindern.
  • typeof Während explizite Tests mit
  • immer sicher sind, ist die Verwendung der automatischen Typumwandlung für Überlegungen zur Dateigröße von Vorteil, da kleinere Dateien schneller geladen werden und weniger Bandbreite verwenden. Es ist jedoch entscheidend zu verstehen, wie Programmiersprachen mit Typumwandlungen umgehen, um unerwartete Ergebnisse zu vermeiden.

Es gibt einige Ausdrücke, die in JavaScript üblich sind, aber einige Programmierpuristen werden Ihnen sagen, dass sie niemals eine gute Idee sind. Diese Ausdrücke haben gemeinsam, dass sie sich auf die automatische Konvertierung angewiesen haben - die Kernfunktionalität von JavaScript, die je nach Situation und Ihrer Sichtweise sowohl ein Vorteil als auch ein Nachteil ist.

In diesem Artikel möchte ich diese beiden Ausdrücke besonders aufmerksam machen und berücksichtigen, in welchen Fällen sie gute Ideen sind und welche keine guten Ideen sind.

if() Der erste Ausdruck ist eine einfache

Bedingung:
if (foo) {
}

Der zweite Ausdruck ist eine variable Zuordnung mit optionalen Werten:
var x = foo || bar;

foo Wenn die bar und foo in beiden Beispielen Booleschen sind, ist der Ausdruck einfach: Wenn foo wahr ist, ist die erste Bedingung erfolgt; zu foo, ansonsten weist x bar zu. x

Aber was ist, wenn sie keine einfachen booleschen Werte sind- was ist, wenn

ein Objekt, ein String oder foo ist? Was ist, wenn undefined und foo unterschiedliche Datentypen sind? Um zu verstehen, wie diese Ausdrücke berechnet werden, müssen wir verstehen, wie JavaScript automatisch zwischen Datentypen umwandelt. bar

automatischer Typumwandlung

JavaScript ist eine "locker getippte" Sprache, was bedeutet, dass JavaScript, wenn ein Bediener oder eine Anweisung einen bestimmten Datentyp erwartet, automatisch Daten in diesen Typ umwandelt. Die

-Anweisung im ersten Beispiel erwartet einen booleschen Wert, sodass alles, was in den Klammern definiert ist, in einen booleschen Wert umgewandelt wird. Gleiches gilt für die Aussagen if() und while(). do...while()

Gemäß den Ergebnissen solcher Konvertierungen (d. H. Richtig oder falsch) werden JavaScript -Werte häufig als "wahr" oder "falsche Werte" bezeichnet. Der einfachste Weg zu verstehen ist: Wenn der Wert ein falscher Wert ist, ist der Wert der wahre Wert;

(natürlich!)
  • false
  • undefined
  • null (Nummer Null)
  • 0 (leere Zeichenfolge)
  • "" (nicht nummer)
  • NaN bemerkenswerte Ausnahmen sind "0" (Zeichenfolge Null) und alle Arten von Objekten - sie sind echte Werte - dies schließt
  • alle
nativen Konstruktoren ein, was bedeutet

Berechnungsergebnisse wahr! (Ein wenig verwirrend, aber in der Praxis müssen Sie nie so native Werte erstellen.) new Boolean(false) Hinweis: Der Vergleich von zwei falschen Werten erzeugt nicht immer die Ergebnisse, die Sie möglicherweise erwarten, z. B. (

), selbst wenn beide falsche Werte sind. Es gibt einige ziemlich komplexe Algorithmen, die bestimmen, wie Gleichstellungsbewertungen funktionieren, und die Diskussion ist jenseits des Rahmens dieses Artikels. Wenn Sie jedoch an Details interessiert sind, können Sie sich den Abstract Equality -Vergleichsalgorithmus in ECMAScript 5.1 ansehen.

null != false bedingte Verknüpfung

Das Beispiel, das ich Ihnen zu Beginn gezeigt habe Existenz des Elements:

Dies funktioniert immer zuverlässig, wenn die DOM -Elemente verarbeitet werden, da die DOM -Spezifikation erforderlich ist, dass Elemente, die nicht existieren, if(). null

andere Situationen sind jedoch nicht so klar, wie beispielsweise dieses Beispiel:
if (foo) {
}

null solche Bedingungen werden häufig verwendet, um

"Wenn der FOO -Parameter definiert ist"

, es gibt jedoch mehrere Situationen, die ein Versagen verursachen können - d. H.

ist ein falscher Wert. Wenn es sich beispielsweise um einen booleschen Wert
var x = foo || bar;
oder eine leere Zeichenfolge handelt, wird der bedingte Code nicht ausgeführt, selbst wenn

bereits definiert ist. foo false Was wir wollen: foo Der Datentyp der undefinierten Parameter (und anderer Variablen) lautet "

". Daher können wir den

-Palator verwenden, um den Datentyp des Parameters zu testen, und wenn

vollständig definiert ist, wird die Bedingung immer bestehen. Natürlich berechnet der Ausdruck
var element = document.getElementById("whatever");
if (element) {
  // 元素存在
} else {
  // 元素不存在
}
immer noch den booleschen Wert, aber der von ihm berechnete Boolesche Wert ist das Ergebnis der

-Spression. undefined typeof foo Zuordnungsverknüpfung if() typeof Das zweite Beispiel, das ich Ihnen zu Beginn gezeigt habe

logische Operatoren geben die booleschen Werte nicht zurück, aber sie erwarten immer noch

boolesche Werte, sodass die Konvertierung und Berechnungen intern erfolgen. Wenn auf True bewertet wird, wird der Wert

zurückgegeben, andernfalls wird der Wert von

zurückgegeben. Das ist sehr nützlich.

Dieser Ausdruck wird normalerweise bei Ereignishandlern gesehen und wird verwendet, um Ereignisparameter basierend auf unterstützten Modellen zu definieren:

if (foo) {
}

wird daher e als boolescher Wert berechnet, der wahr ist (Ereignisobjekt), wenn das Ereignisparametermodell unterstützt wird, ansonsten ein falscher Wert (undefined); Ansonsten return e. window.event

Ausdrücke desselben Typs werden häufig auch zum Zuweisen von Ereignisattributen verwendet, wobei er unterstützte Attribute finden, indem jede Möglichkeit bewertet wird:

var x = foo || bar;
Daher wird jede dieser Referenzen wiederum bewertet (von links nach rechts) und die erste Berechnung wird zurückgegeben. Der erste Fall übernimmt das Standardmodell, der zweite Fall ist für Internet Explorer und der dritte Fall für Internet Explorer, wenn ein Ereignis auf einem Fensterobjekt ausgelöst werden kann (ohne die Eigenschaft

). srcElement

Dieser Ausdruck ist jedoch auch anfällig für Scheitern, ohne die Wahrheit der Daten zu kennen. Ein weiterer häufiger Anwendungsfall besteht beispielsweise darin, Standardwerte für optionale Parameter zu definieren, dies ist jedoch nicht gut:

var element = document.getElementById("whatever");
if (element) {
  // 元素存在
} else {
  // 元素不存在
}
Wenn Sie nun sicher sind, ist

foo immer oder , und wenn die leere Zeichenfolge als undefined behandelt werden sollte, ist der Ausdruck sicher. Aber wenn dies nicht der Fall ist, muss es als genaueren Inhalt neu definiert werden, zum Beispiel: undefined

function doStuff(foo) {
  if (foo) {
    ...
  }
}
Durch das Testen des Typs gegen "String" können wir eine Vielzahl von Fällen verarbeiten -

undefinierte Fälle und Fälle, in denen er falsch als Nicht -Stringwerte definiert wird. In diesem Fall erlauben wir auch leere Zeichenfolgen als gültige Eingabe. Wenn wir jedoch leere Zeichenfolgen ausschließen möchten, müssen wir eine zweite Bedingung hinzufügen: foo

function doStuff(foo) {
  if (typeof foo != "undefined") {
    ...
  }
}
Es gibt einige andere überraschend subtile Situationen, die Probleme verursachen können. Zum Beispiel haben wir möglicherweise eine Datumsfunktion, die einen Unix -Zeitstempel erstellt, es sei denn, der Zeitstempel der Eingabe ist optional definiert:

var x = foo || bar;
Wenn die Eingabe 0 ist, fällt es fehl - da Null ein falscher Wert ist, aber auch ein gültiger Zeitstempel ist.

Allgemeine Prinzipien

Die allgemeine Lektion, die aus all dem gelernt wurde, ist einfach - Überlegen Sie, wie sich die Konvertierungen von Typen auf die Bewertung auswirken, und achten Sie darauf, nicht in die Fallen zu fallen, denen wir begegnen. Mit ordnungsgemäßer Aufmerksamkeit und Aufmerksamkeit können Sie weiterhin automatische Typumwandlungen verwenden, um Bedingungen und logische Ausdrücke gegebenenfalls zu verkürzen.

Aber das wirft die Frage auf - wenn wir wissen, dass die Verwendung von

immer sicher ist, wenn es manchmal nicht sicher ist, sich auf automatische Typumwandlungen zu verlassen -, warum nicht immer typeof ist dann klar? Wenn der Grund für die Bevorzugung einer kürzeren Grammatik einfach darauf zurückzuführen ist, dass sie schneller typisiert, ist dies ein fauler und schlampiger Grund. Aber die Wahrheit ist, dass JavaScript normalerweise über ein öffentliches Netzwerk ausgeführt wird. In diesem Fall ist die Dateigröße wichtig. Kleinere Dateien laden schneller und verwenden weniger Bandbreite, und kleine Syntaxverknüpfungen können sich tatsächlich ansammeln.

Die Verwendung kürzerer Ausdrücke ist keine Optimierung selbst, sondern nur ein Programmierstil, der die Sprachfunktionen voll ausnutzt.

(Der FAQ-Abschnitt im Originaltext wird hier weggelassen, da der Inhalt dieses Teils schwach mit dem Thema des Artikels zusammenhängt und länger ist. Daher ist er nicht für die Aufbewahrung in Pseudooriginalwerken geeignet.)

Das obige ist der detaillierte Inhalt vonAutomatische Konvertierung in der realen Welt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Java gegen JavaScript: Ein detaillierter Vergleich für EntwicklerJava gegen JavaScript: Ein detaillierter Vergleich für EntwicklerMay 16, 2025 am 12:01 AM

JavaandjavaScriptaredistinctuGuages: JavaisusedForenterPrisandMobileApps, während JavaScriptisforinteractivewebpages.1) Javaiscompiled, statusweit, Andrunsonjvm.2) JavaScriptisinterpretierte, dynamisch und Runsinbrowserde

JavaScript -Datentypen: Gibt es einen Unterschied zwischen Browser und NodeJs?JavaScript -Datentypen: Gibt es einen Unterschied zwischen Browser und NodeJs?May 14, 2025 am 12:15 AM

JavaScript -Kerndatentypen sind in Browsern und Knoten.js konsistent, werden jedoch unterschiedlich als die zusätzlichen Typen behandelt. 1) Das globale Objekt ist ein Fenster im Browser und global in node.js. 2) Node.js 'eindeutiges Pufferobjekt, das zur Verarbeitung von Binärdaten verwendet wird. 3) Es gibt auch Unterschiede in der Leistung und Zeitverarbeitung, und der Code muss entsprechend der Umgebung angepasst werden.

JavaScript -Kommentare: Eine Anleitung zur Verwendung // und / * * /JavaScript -Kommentare: Eine Anleitung zur Verwendung // und / * * /May 13, 2025 pm 03:49 PM

JavaScriptUSESTWOTYPESOFCOMMENMENTEN: Einzelzeilen (//) und Multi-Linie (//). 1) Verwendung // Forquicknotesorsingle-Linexplanationen.2 Verwendung // ForlongerExPlanationsCompomentingingoutblocks-

Python gegen JavaScript: Eine vergleichende Analyse für EntwicklerPython gegen JavaScript: Eine vergleichende Analyse für EntwicklerMay 09, 2025 am 12:22 AM

Der Hauptunterschied zwischen Python und JavaScript sind die Typ -System- und Anwendungsszenarien. 1. Python verwendet dynamische Typen, die für wissenschaftliche Computer- und Datenanalysen geeignet sind. 2. JavaScript nimmt schwache Typen an und wird in Front-End- und Full-Stack-Entwicklung weit verbreitet. Die beiden haben ihre eigenen Vorteile bei der asynchronen Programmierung und Leistungsoptimierung und sollten bei der Auswahl gemäß den Projektanforderungen entschieden werden.

Python vs. JavaScript: Auswählen des richtigen Tools für den JobPython vs. JavaScript: Auswählen des richtigen Tools für den JobMay 08, 2025 am 12:10 AM

Ob die Auswahl von Python oder JavaScript vom Projekttyp abhängt: 1) Wählen Sie Python für Datenwissenschafts- und Automatisierungsaufgaben aus; 2) Wählen Sie JavaScript für die Entwicklung von Front-End- und Full-Stack-Entwicklung. Python ist für seine leistungsstarke Bibliothek in der Datenverarbeitung und -automatisierung bevorzugt, während JavaScript für seine Vorteile in Bezug auf Webinteraktion und Full-Stack-Entwicklung unverzichtbar ist.

Python und JavaScript: Verständnis der Stärken der einzelnenPython und JavaScript: Verständnis der Stärken der einzelnenMay 06, 2025 am 12:15 AM

Python und JavaScript haben jeweils ihre eigenen Vorteile, und die Wahl hängt von den Projektbedürfnissen und persönlichen Vorlieben ab. 1. Python ist leicht zu erlernen, mit prägnanter Syntax, die für Datenwissenschaft und Back-End-Entwicklung geeignet ist, aber eine langsame Ausführungsgeschwindigkeit hat. 2. JavaScript ist überall in der Front-End-Entwicklung und verfügt über starke asynchrone Programmierfunktionen. Node.js macht es für die Entwicklung der Vollstapel geeignet, die Syntax kann jedoch komplex und fehleranfällig sein.

JavaScripts Kern: Ist es auf C oder C aufgebaut?JavaScripts Kern: Ist es auf C oder C aufgebaut?May 05, 2025 am 12:07 AM

JavaScriptisnotbuiltoncorc; Es ist angehört, dass sich JavaScriptWasdedeSthatrunsonGineoFtencninc.

JavaScript-Anwendungen: Von Front-End bis Back-EndJavaScript-Anwendungen: Von Front-End bis Back-EndMay 04, 2025 am 12:12 AM

JavaScript kann für die Entwicklung von Front-End- und Back-End-Entwicklung verwendet werden. Das Front-End verbessert die Benutzererfahrung durch DOM-Operationen, und die Back-End-Serveraufgaben über node.js. 1. Beispiel für Front-End: Ändern Sie den Inhalt des Webseitentextes. 2. Backend Beispiel: Erstellen Sie einen Node.js -Server.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Nordhold: Fusionssystem, erklärt
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

MinGW – Minimalistisches GNU für Windows

MinGW – Minimalistisches GNU für Windows

Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)