JavaScript:
The Weird Parts
Lucas Dohmen
@moonbeamlabs
Slide 2
Slide 2 text
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
Slide 3
Slide 3 text
Lucas Dohmen
Senior Consultant
bei INNOQ Deutschland GmbH
Web Architektur & Entwicklung
3
Slide 4
Slide 4 text
Automatic Type
Conversion
4
Slide 5
Slide 5 text
5
“The ECMAScript runtime system
performs automatic type conversion
as needed.”
ECMAScript 2018 Language Specification, 7.1 Type Conversion
Slide 6
Slide 6 text
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
Slide 7
Slide 7 text
Klarer Fall! Du willst
einen Boolean
Slide 8
Slide 8 text
8
Die Wahrheit ist irgendwo da draußen
Alles wird zu true umgewandelt außer
false, null, undefined, 0, NaN, ""
Slide 9
Slide 9 text
No content
Slide 10
Slide 10 text
10
JavaScript versucht für dich Dinge in den
richtigen Typen zu verwandeln.
Dabei stellt es sich nicht immer klug an.
Slide 11
Slide 11 text
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.
Slide 12
Slide 12 text
Objekte
12
Slide 13
Slide 13 text
Kurzschreibweise
für
x["a"]
Slide 14
Slide 14 text
cache[lisa] ist nun
Lisa
...aber cache[lucas] auch
Wait what?
Clippy
strikes
again
Slide 15
Slide 15 text
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
Slide 16
Slide 16 text
Arrays sind auch Objekte
Slide 17
Slide 17 text
No content
Slide 18
Slide 18 text
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
•...
Slide 19
Slide 19 text
No content
Slide 20
Slide 20 text
Das fügt die Methode aber nur dieser Liste hinzu
Slide 21
Slide 21 text
person
ist der
Prototyp
von
person1
Slide 22
Slide 22 text
Prototype: Array
Prototype: RegExp
Prototype: Foo
Slide 23
Slide 23 text
(don't do this at home)
Slide 24
Slide 24 text
24
class ist nur neue Syntax
für diese Funktionalität
Slide 25
Slide 25 text
No content
Slide 26
Slide 26 text
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.
Slide 27
Slide 27 text
this
27
Slide 28
Slide 28 text
person = this
Slide 29
Slide 29 text
Zauberei!
Slide 30
Slide 30 text
bind
benutzen
Slide 31
Slide 31 text
31
this funktioniert nicht wie in anderen
Sprachen:
Der Wert von this hängt vom Aufruf ab.
Slide 32
Slide 32 text
32
Mehr gefällig?
Remote-JavaScript Training am 26. & 27. September
innoq.com/js-training