Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Weird Parts

Weird Parts

Viele Entwickler, die im Web arbeiten, programmieren auch JavaScript. Betonung auf “auch”: Ihre Hauptsprache und/oder Lieblingssprache ist wahrscheinlich eine andere. Gern wird JavaScript in “Geschmacksrichtung Java/Ruby…” geschrieben. Aber JS ist anders. Packt euer Handtuch ein: Ich nehme euch mit auf eine Reise ins JavaScript-Universum, um euch diese seltsame und tolle Sprache und seine Besonderheiten näherzubringen und euch zu helfen, JavaScript zu schreiben, wie es geschrieben werden möchte.

B049f961d55097ef9104ff4b275a517b?s=128

Lucas Dohmen

April 27, 2022
Tweet

More Decks by Lucas Dohmen

Other Decks in Technology

Transcript

  1. JavaScript: The Weird Parts Lucas Dohmen @moonbeamlabs

  2. 2 Design 1. Brendan mochte gerne Scheme und Self 2.

    Marketing-Abteilung wollte Ähnlichkeit zu Java 3. Es sollte einfach zu benutzen sein, auch für Nicht- Programmierer 4. Er hatte nur 10 Tage Zeit So hot right now
  3. Lucas Dohmen Senior Consultant bei INNOQ Deutschland GmbH Web Architektur

    & Entwicklung 3
  4. Automatic Type Conversion 4

  5. 5 “The ECMAScript runtime system performs automatic type conversion as

    needed.” ECMAScript 2018 Language Specification, 7.1 Type Conversion
  6. Es sieht so aus als würdest du einen String brauchen.

    Ich hab ihn für dich konvertiert. Klarer Fall, du willst eine Zahl*! * 'hello' als Zahl ist NaN '' als Zahl ist 0
  7. Klarer Fall! Du willst einen Boolean

  8. 8 Die Wahrheit ist irgendwo da draußen Alles wird zu

    true umgewandelt außer false, null, undefined, 0, NaN, ""
  9. None
  10. 10 JavaScript versucht für dich Dinge in den richtigen Typen

    zu verwandeln. Dabei stellt es sich nicht immer klug an.
  11. 11 Folglich •Immer === statt == benutzen – hier passiert

    keine Typkonvertierung •Bei Gleichheit zudem beachten: Primitive Werte werden anhand ihres Wertes verglichen, Objekte anhand ihrer Identiät •Was ist ein Objekt? Dazu nun mehr.
  12. Objekte 12

  13. Kurzschreibweise für x["a"]

  14. cache[lisa] ist nun <h1>Lisa</h1> ...aber cache[lucas] auch Wait what? Clippy

    strikes again
  15. 15 Objekte •Ein Objekt ist ein Dictionary •Die Schlüssel sind

    immer* Strings •Die Werte können beliebige Typen haben •Ist der Schlüssel kein String, wird toString() darauf aufgerufen: •lisa.toString() === '[object Object]' •lucas.toString() === '[object Object]' •lisa.toString() === lucas.toString() *oder Symbols, aber das führt zu weit
  16. Arrays sind auch Objekte

  17. None
  18. 18 Fast alles ist ein Objekt •Primitive Values: Undefined, Null,

    Boolean, Number, String, Symbol •Alles andere sind Objekte, zB.: •Arrays •Reguläre Ausdrücke •Promises •Funktionen •...
  19. None
  20. Das fügt die Methode aber nur dieser Liste hinzu

  21. person ist der Prototyp von person1

  22. Prototype: Array Prototype: RegExp Prototype: Foo

  23. (don't do this at home)

  24. 24 class ist nur neue Syntax für diese Funktionalität

  25. None
  26. 26 Objekte sind Dictionaries die Strings auf beliebige Objekte abbilden

    und alle nicht definierten Schlüssel an die Prototypenkette weitergeben. Wird nichts gefunden, wird undefined zurückgegeben.
  27. this 27

  28. person = this

  29. Zauberei!

  30. bind benutzen

  31. 31 this funktioniert nicht wie in anderen Sprachen: Der Wert

    von this hängt vom Aufruf ab.
  32. 32 Mehr gefällig? Remote-JavaScript Training am 26. & 27. September

    innoq.com/js-training
  33. Krischerstr. 100 40789 Monheim am Rhein Germany +49 2173 3366-0

    Ohlauer Str. 43 10999 Berlin Germany +49 2173 3366-0 Ludwigstr. 180E 63067 Offenbach Germany +49 2173 3366-0 Kreuzstr. 16 80331 München Germany +49 2173 3366-0 Hermannstrasse 13 20095 Hamburg Germany +49 2173 3366-0 Gewerbestr. 11 CH-6330 Cham Switzerland +41 41 743 0116 innoQ Deutschland GmbH innoQ Schweiz GmbH www.innoq.com 33 Danke! Fragen? Lucas Dohmen lucas.dohmen@innoq.com +49 151 75062496 moonbeamlabs