You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Dieses Beispiel würde funktionieren und `[ 'banana', 'apple', 'orange', 'pear' ]` ausgeben.
2983
2983
</p>
2984
2984
</details>
2985
+
2986
+
---
2987
+
2988
+
###### <a name=20190817></a>95. Was ist der Output?
2989
+
2990
+
```javascript
2991
+
function nums(a, b) {
2992
+
if
2993
+
(a > b)
2994
+
console.log('a is bigger')
2995
+
else
2996
+
console.log('b is bigger')
2997
+
return
2998
+
a + b
2999
+
}
3000
+
3001
+
console.log(nums(4, 2))
3002
+
console.log(nums(1, 2))
3003
+
```
3004
+
3005
+
-A:`a is bigger`, `6` und `b is bigger`, `3`
3006
+
-B:`a is bigger`, `undefined` und `b is bigger`, `undefined`
3007
+
-C:`undefined` und `undefined`
3008
+
-D:`SyntaxError`
3009
+
3010
+
<details><summary><b>Antwort</b></summary>
3011
+
<p>
3012
+
3013
+
#### Antwort:B
3014
+
3015
+
In JavaScript muss das Semikolon _nicht_ explizit gesetzt werden, allerdings setzt die JavaScript Engine Semikolons nach Statements. Diesen Vorgang nennt man **automatische Semikolonsetzung**. Ein Statement ist zum Beispiel eine Variable oder ein Keyword wie `throw`, `return`, `break`, usw.
3016
+
3017
+
In unserem Beispiel haben wir ein `return` Statement gefolgt von einem anderen Wert `a + b` auf der _nächsten Zeile_. Da es eine neue Zeile ist, weiß JavaScript nicht, dass das der Wert ist, den wir eigentlich ausgeben wollten. Stattdessen wird automatisch ein Semikolon nach `return` gesetzt, was man wiefolgt lesen kann:
3018
+
3019
+
```javascript
3020
+
return;
3021
+
a + b
3022
+
```
3023
+
3024
+
Das bedeutet, dass `a + b` nie erreicht wird, da die Funktion auf der Zeile davor mit dem `return` Keyword endet. Wenn wie hier kein Wert ausgegeben wird, gibt die Funktion `undefined` aus.
3025
+
Bedenke: Semikolons werden **nicht** automatisch nach `if/else` Statements gesetzt!
3026
+
3027
+
</p>
3028
+
</details>
3029
+
3030
+
---
3031
+
3032
+
###### 96. Was ist der Output?
3033
+
3034
+
```javascript
3035
+
class Person {
3036
+
constructor() {
3037
+
this.name = "Lydia"
3038
+
}
3039
+
}
3040
+
3041
+
Person = class AnotherPerson {
3042
+
constructor() {
3043
+
this.name = "Sarah"
3044
+
}
3045
+
}
3046
+
3047
+
const member = new Person()
3048
+
console.log(member.name)
3049
+
```
3050
+
3051
+
-A:`"Lydia"`
3052
+
-B:`"Sarah"`
3053
+
-C:`Error: cannot redeclare Person`
3054
+
-D:`SyntaxError`
3055
+
3056
+
<details><summary><b>Antwort</b></summary>
3057
+
<p>
3058
+
3059
+
#### Antwort:B
3060
+
3061
+
Wir können Klassen gleich anderen Klassen oder Funktions Konstruktoren setzen. In diesem Beispiel setzen wir `Person` gleich `AnotherPerson`. Der Name in diesem Konstruktor ist `Sarah`, sodass die name-Property der neuen `Person` Instanz `member` gleich `"Sarah"` ist.
3062
+
3063
+
</p>
3064
+
</details>
3065
+
3066
+
---
3067
+
3068
+
###### 97. Was ist der Output?
3069
+
3070
+
```javascript
3071
+
const info = {
3072
+
[Symbol('a')]: 'b'
3073
+
}
3074
+
3075
+
console.log(info)
3076
+
console.log(Object.keys(info))
3077
+
```
3078
+
3079
+
-A:`{Symbol('a'): 'b'}` und `["{Symbol('a')"]`
3080
+
-B:`{}` und `[]`
3081
+
-C:`{ a: "b" }` und `["a"]`
3082
+
-D:`{Symbol('a'): 'b'}` und `[]`
3083
+
3084
+
<details><summary><b>Antwort</b></summary>
3085
+
<p>
3086
+
3087
+
#### Antwort:D
3088
+
3089
+
Ein Symbol ist nicht _zählbar_. Die`Object.keys` Methode gibt alle zählbaren Key Properties eines Objekts aus. DasSymbol ist nicht sichtbar, sodass ein leeres Array ausgegeben wird. Wenn wir das gesamte Objekt loggen sind alle Properties sichtbar, auch nicht zählbare.
3090
+
3091
+
Das ist einer der vielen Vorteile eines Symbols: nebem einem einzigartigen Wert (welcher verhindert, dass versehentlich zwei Objekte gleiche Namen haben, zum Beispiel wenn wir mit verschiedenen Libraries arbeiten) können Properties von Objekten auf diese Art versteckt werden.
3092
+
Bedenke: Man kann die Symbole dennoch mit der `Object.getOwnPropertySymbols()` Methode einsehen.
Die `getList` Funktion bekommt ein Array als Argument zugewiesen. Zwischen den Klammern der `getList` Funktion wird das Array direkt destrukturiert. Man könnte das auch wiefolgt sehen:
3123
+
3124
+
`[x, ...y] = [1, 2, 3, 4]`
3125
+
3126
+
Mit dem Rest Parameter `...y` packen wir alle übrigen Argumente in ein Array. Die übrigen Argumente sind in dem Fall `2`, `3` und `4`. Der Wert von `y` ist ein Array mit den restlichen Parametern. Der Wert von `x` ist gleich `1` sodass `[1, [2, 3, 4]]` geloggt wird.
3127
+
3128
+
Die `getUser` Funktion bekommt ein Objekt zugewiesen. Bei Arrow Funktionen müssen wir keine geschweiften Klammern verwenden, wenn wir nur einen Wert ausgeben. Wenn wir aber ein _Objekt_ von einer Arrow Funktion ausgeben lassen möchten, so muss dieses zwischen Klammern stehen, ansonsten wird nichts ausgegeben. Die folgende Funktion hätte ein Objekt ausgegeben:
Da kein Wert ausgegeben wird, gibt die Funktion `undefined` aus.
3133
+
3134
+
</p>
3135
+
</details>
3136
+
3137
+
---
3138
+
3139
+
###### 99. Was ist der Output?
3140
+
3141
+
```javascript
3142
+
const name = "Lydia"
3143
+
3144
+
console.log(name())
3145
+
```
3146
+
3147
+
-A:`SyntaxError`
3148
+
-B:`ReferenceError`
3149
+
-C:`TypeError`
3150
+
-D:`undefined`
3151
+
3152
+
<details><summary><b>Antwort</b></summary>
3153
+
<p>
3154
+
3155
+
#### Antwort:C
3156
+
3157
+
Die Variable `name` beinhaltet einen String, welcher logischer Weise keine Funktion ist und daher nicht ausgeführt werden kann.
3158
+
3159
+
TypeErrors werden ausgeworfen, wenn ein Wert einen falschen Typ aufweist. JavaScript hat eine Funktion erwartet, da wir `name` ausführen. Da es aber ein String war bekommen wir den TypeError: name is not a function!
3160
+
3161
+
SyntaxErrors werden ausgeworfen, wenn wir etwas schreiben, was kein gültiger JavaScript Code ist, zum Beispiel wenn wir uns vertippen und anstatt `return` `retrun` schreiben.
3162
+
3163
+
ReferenceErrors werden ausgeworfen, wenn JavaScript eine Referenz zu einem Wert nicht finden kann.
3164
+
3165
+
</p>
3166
+
</details>
3167
+
3168
+
---
3169
+
3170
+
###### 100. Was ist der Output?
3171
+
3172
+
```javascript
3173
+
// 🎉✨ Das ist unsere 100. Frage! ✨🎉
3174
+
3175
+
const output = `${[] && 'Im'}possible!
3176
+
You should${'' && `n't`} see a therapist after so much JavaScript lol`
3177
+
```
3178
+
3179
+
- A: `possible! You should see a therapist after so much JavaScript lol`
3180
+
- B: `Impossible! You should see a therapist after so much JavaScript lol`
3181
+
- C: `possible! You shouldn't see a therapist after so much JavaScript lol`
3182
+
- D: `Impossible! You shouldn't see a therapist after so much JavaScript lol`
3183
+
3184
+
<details><summary><b>Antwort</b></summary>
3185
+
<p>
3186
+
3187
+
#### Antwort: B
3188
+
3189
+
`[]` ist ein "truthy" Wert. Mit dem `&&` Operator geben wir den rechten Wert aus, wenn der linke truthy ist. In diesem Fall ist `[]` truthy, wodurch `"Im'` ausgegeben wird.
3190
+
3191
+
`""` ein ein "falsy" Wert. Wenn der linke Wert falsy ist wird nichts ausgegeben. In diesem Fall wird `n't` _nicht_ ausgegeben.
3192
+
3193
+
</p>
3194
+
</details>
3195
+
3196
+
---
3197
+
3198
+
###### 101. Was ist der Output?
3199
+
3200
+
```javascript
3201
+
const one = (false|| {} ||null)
3202
+
const two = (null || false || "")
3203
+
const three = ([] || 0 || true)
3204
+
3205
+
console.log(one, two, three)
3206
+
```
3207
+
3208
+
- A: `false` `null` `[]`
3209
+
- B: `null` `""` `true`
3210
+
- C: `{}``""``[]`
3211
+
- D: `null``null``true`
3212
+
3213
+
<details><summary><b>Antwort</b></summary>
3214
+
<p>
3215
+
3216
+
#### Antwort: C
3217
+
3218
+
Mit dem `||` Operator geben wir den ersten truthy Operand aus. Wenn alle Werte falsy sind wird der letzte Operand ausgegeben.
3219
+
3220
+
`(false|| {} ||null)`: das leere Objekt `{}` ist truthy. Das ist der erste und einzige truthy Wert und wird daher ausgegeben. `one` ist gleich `{}`.
3221
+
3222
+
`(null||false||"")`: alle Operanden sind falsy. Das bedeutet, dass der letzte Wert `""` ausgegeben wird. `two` ist gleich `""`.
3223
+
3224
+
`([] ||0||"")`: das leere Array `[]` ist truthy. Das ist der erste truthy Wert, und wird daher ausgegeben. `three` ist gleich `[]`.
0 commit comments