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
@@ -2201,8 +2201,8 @@ Mit dem `+` Operator können Strings zusammengesetzt werden. In diesem Fall werd
2201
2201
2202
2202
```javascript
2203
2203
function* startGame() {
2204
-
const Answer = yield "Do you love JavaScript?";
2205
-
if (Answer !== "Yes") {
2204
+
const Antwort = yield "Do you love JavaScript?";
2205
+
if (Antwort !== "Yes") {
2206
2206
return "Oh wow... Guess we're gone here";
2207
2207
}
2208
2208
return "JavaScript loves you back ❤️";
@@ -2225,9 +2225,9 @@ console.log(/* 2 */); // JavaScript loves you back ❤️
2225
2225
2226
2226
Eine Generator Funktion pausiert die Ausführung, wenn das `yield` Keyword vorliegt. Zuerst müssen wir den String "Do you love JavaScript?" abwarten, was mit `game.next().value` möglich ist.
2227
2227
2228
-
Jede Zeile wird ausgeführt, bis das erste `yield` Keyword auftritt. Da auf der ersten Zeile ein `yield` in der Funktion vorliegt wird die Ausführung damit angehalten. Das bedeutet, dass die Variable `Answer` _noch nicht definiert_ wurde.
2228
+
Jede Zeile wird ausgeführt, bis das erste `yield` Keyword auftritt. Da auf der ersten Zeile ein `yield` in der Funktion vorliegt wird die Ausführung damit angehalten. Das bedeutet, dass die Variable `Antwort` _noch nicht definiert_ wurde.
2229
2229
2230
-
Wenn wir `game.next("Yes").value` aufrufen wird das vorhergehende `yield` durch den Wert des Parameters ersetzt, der an `next()` übergeben wird - `"Yes"` in diesem Fall. Der Wert der Variable `Answer` ist jetzt gleich `"Yes"`. Das if-Statement gibt `false` aus und `JavaScript loves you back ❤️` wird geloggt.
2230
+
Wenn wir `game.next("Yes").value` aufrufen wird das vorhergehende `yield` durch den Wert des Parameters ersetzt, der an `next()` übergeben wird - `"Yes"` in diesem Fall. Der Wert der Variable `Antwort` ist jetzt gleich `"Yes"`. Das if-Statement gibt `false` aus und `JavaScript loves you back ❤️` wird geloggt.
2231
2231
2232
2232
</p>
2233
2233
</details>
@@ -2727,3 +2727,258 @@ Wenn wir `hasName` gleich `name` setzen, so beinhaltet `hasName` den Wert von `n
2727
2727
`name.length` gibt die Länge des Arguments aus, nicht den Boolean Wert.
2728
2728
</p>
2729
2729
</details>
2730
+
2731
+
2732
+
---
2733
+
2734
+
###### <a name=20190805></a>87. Was ist der Output?
2735
+
2736
+
```javascript
2737
+
console.log("I want pizza"[0])
2738
+
```
2739
+
2740
+
- A: `"""`
2741
+
- B: `"I"`
2742
+
- C: `SyntaxError`
2743
+
- D: `undefined`
2744
+
2745
+
<details><summary><b>Antwort</b></summary>
2746
+
<p>
2747
+
2748
+
#### Antwort: B
2749
+
2750
+
Um ein Zeichen an einer bestimmten Stelle eines Strings zu bekommen kann man Bracket Notation verwenden. Das erste Zeichen in einem String hat den Index 0, usw. In diesem Fall möchten wir das Zeichen mit dem Index 0, was das Zeichen `"I"` loggt.
2751
+
2752
+
Diese Methode funktioniert nicht in IE7 und davor. Hier muss `.charAt()` verwendet werden.
2753
+
2754
+
</p>
2755
+
</details>
2756
+
2757
+
---
2758
+
2759
+
###### 88. Was ist der Output?
2760
+
2761
+
```javascript
2762
+
functionsum(num1, num2=num1) {
2763
+
console.log(num1 + num2)
2764
+
}
2765
+
2766
+
sum(10)
2767
+
```
2768
+
2769
+
- A: `NaN`
2770
+
- B: `20`
2771
+
- C: `ReferenceError`
2772
+
- D: `undefined`
2773
+
2774
+
<details><summary><b>Antwort</b></summary>
2775
+
<p>
2776
+
2777
+
#### Antwort: B
2778
+
2779
+
Man kann den Wert eines Standard Parameters gleich einem anderen Parameter in der Funktion setzen, sofern diese _vor_ dem Standard Parameter definiert wurden. Wir übergeben den Wert `10` an die `sum` Funktion. Wenn die `sum` Funktion nur ein Argument übergeben bekommt bedeutet das, dass der Wert für `num2` nicht gesetzt wurde und der Wert von `num1` ist gleich dem Wert `10`. Der Standardwert von `num2` ist gleich dem Wert von `num1`, sprich `10`. `num1 + num2` gibt `20` aus.
2780
+
2781
+
Wenn man den Wert des Standard Paramenters gleich dem Parameter setztm der _danach_ definiert wurde, bekommen wir einen Fehler ausgegeben, da der Wert noch nicht initialisiert wurde.
Mit `import*asname` importieren wir _alle Exporte_ der `module.js` in `index.js` als `data`. In der Datei `module.js` haben wir zwei Exporte: den Standard Export und einen benannten Export. Der Standard Export ist eine Funktion, die `"Hello World"` ausgibt und der benannte Export ist eine Variable namens `name` mit dem Wert `"Lydia"`.
2812
+
2813
+
Das `data` Objekt hat eine Standard Property für alle Standard Exporte, andere Properties haben die Namen des benannten Exports und der entsprechenden Werte.
2814
+
2815
+
</p>
2816
+
</details>
2817
+
2818
+
---
2819
+
2820
+
###### 90. Was ist der Output?
2821
+
2822
+
```javascript
2823
+
classPerson {
2824
+
constructor(name) {
2825
+
this.name= name
2826
+
}
2827
+
}
2828
+
2829
+
constmember=newPerson("John")
2830
+
console.log(typeof member)
2831
+
```
2832
+
2833
+
- A: `"class"`
2834
+
- B: `"function"`
2835
+
- C: `"object"`
2836
+
- D: `"string"`
2837
+
2838
+
<details><summary><b>Antwort</b></summary>
2839
+
<p>
2840
+
2841
+
#### Antwort: C
2842
+
2843
+
Klassen sind syntaktischer Zucker für Funktionskontruktoren. Das Equivalent der `Person` Klasse als Funktionskonstruktor wäre:
2844
+
2845
+
```javascript
2846
+
functionPerson() {
2847
+
this.name= name
2848
+
}
2849
+
```
2850
+
2851
+
Das Aufrufen eines Funktionskonstruktors mit `new` hat zur Folge, dass eine Instanz von `Person` erstellt wird. `typeof` gibt `"object"` für die instanz aus. `typeof member` gibt `"object"` aus.
2852
+
2853
+
</p>
2854
+
</details>
2855
+
2856
+
---
2857
+
2858
+
###### 91. Was ist der Output?
2859
+
2860
+
```javascript
2861
+
let newList = [1, 2, 3].push(4)
2862
+
2863
+
console.log(newList.push(5))
2864
+
```
2865
+
2866
+
- A: `[1, 2, 3, 4, 5]`
2867
+
- B: `[1, 2, 3, 5]`
2868
+
- C: `[1, 2, 3, 4]`
2869
+
- D: `Error`
2870
+
2871
+
<details><summary><b>Antwort</b></summary>
2872
+
<p>
2873
+
2874
+
#### Antwort: D
2875
+
2876
+
Die `.push` Methode gibt die _neue Länge_ des Arrays aus, nicht die Länge des Arrays selbst. Wenn wir `newList` gleich `[1, 2, 3].push(4)` setzen, setzen wir `newList` auch gleich der Länge des Arrays: `4`.
2877
+
2878
+
Dann versuchen wir die `.push` Methode auf `newList` anzuwenden. Da `newList` den numerischen Wert `4` beinhaltet können wir die `.push` Methode nicht anwenden: ein TypeError wird ausgegeben.
2879
+
2880
+
</p>
2881
+
</details>
2882
+
2883
+
---
2884
+
2885
+
###### 92. Was ist der Output?
2886
+
2887
+
```javascript
2888
+
functiongiveLydiaPizza() {
2889
+
return"Here is pizza!"
2890
+
}
2891
+
2892
+
constgiveLydiaChocolate= () =>"Here's chocolate... now go hit the gym already."
2893
+
2894
+
console.log(giveLydiaPizza.prototype)
2895
+
console.log(giveLydiaChocolate.prototype)
2896
+
```
2897
+
2898
+
- A: `{ constructor: ...}` `{ constructor: ...}`
2899
+
- B: `{}` `{ constructor: ...}`
2900
+
- C: `{ constructor: ...}` `{}`
2901
+
- D: `{ constructor: ...}` `undefined`
2902
+
2903
+
<details><summary><b>Antwort</b></summary>
2904
+
<p>
2905
+
2906
+
#### Antwort: D
2907
+
2908
+
Reguläre Funktionen wie `giveLydiaPizza` haben eine `prototype` Property, die ein Objekt (PrototypeObject) mit einem `constructor` ist. Arrow Funktionen dagegen (wie `giveLydiaChocolate`) haben keinen `prototype`. `undefined` wird ausgegeben, wenn wir versuchen den `prototype` mit `giveLydiaChocolate.prototype` aufzurufen.
2909
+
2910
+
</p>
2911
+
</details>
2912
+
2913
+
---
2914
+
2915
+
###### 93. Was ist der Output?
2916
+
2917
+
```javascript
2918
+
const person = {
2919
+
name:"Lydia",
2920
+
age:21
2921
+
}
2922
+
2923
+
for (const [x, y] ofObject.entries(person)) {
2924
+
console.log(x, y)
2925
+
}
2926
+
```
2927
+
2928
+
- A: `name``Lydia` und `age``21`
2929
+
- B: `["name", "Lydia"]` und `["age", 21]`
2930
+
- C: `["name", "age"]` und `undefined`
2931
+
- D: `Error`
2932
+
2933
+
<details><summary><b>Antwort</b></summary>
2934
+
<p>
2935
+
2936
+
#### Antwort: A
2937
+
2938
+
`Object.entries(person)` gibt ein Array mit verschachtelten Arrays der Keys aus:
2939
+
2940
+
`[ [ 'name', 'Lydia' ], [ 'age', 21 ] ]`
2941
+
2942
+
Mit der `for-of` Schleife iterieren wir über jedes Element in dem Array, in diesem Fall die verschachtelten Arrays. Wir können die verschachtelten Arrays mit `const [x, y]` in der for-of Schleife destrukturieren. `x` ist gleich dem ersten Element, `y` ist gleich dem zweiten Elementin dem verschachtelten Array.
2943
+
2944
+
Das erste verschachtelte Array ist `[ "name", "Lydia" ]`. `x` ist gleich `"name"` und `y` gleich `"Lydia"`, was geloggt wird.
2945
+
Das zweite verschachtelte Array ist `[ "age", 21 ]`. `x` ist gleich `"age"` und `y` ist gleich `21`, was geloggt wird.
2946
+
2947
+
</p>
2948
+
</details>
2949
+
2950
+
---
2951
+
2952
+
###### 94. Was ist der Output?
2953
+
2954
+
```javascript
2955
+
function getItems(fruitList, ...args, favoriteFruit) {
2956
+
return [...fruitList, ...args, favoriteFruit]
2957
+
}
2958
+
2959
+
getItems(["banana", "apple"], "pear", "orange")
2960
+
```
2961
+
2962
+
-A:`["banana", "apple", "pear", "orange"]`
2963
+
-B:`[["banana", "apple"], "pear", "orange"]`
2964
+
-C:`["banana", "apple", ["pear"], "orange"]`
2965
+
-D:`SyntaxError`
2966
+
2967
+
<details><summary><b>Antwort</b></summary>
2968
+
<p>
2969
+
2970
+
#### Antwort:D
2971
+
2972
+
`...args` ist ein Rest-Parameter. Der Wert des Rest-Parameters ist ein Array mit allen weiteren Argumenten **und kann nur der letzte Parameter sein**! In diesem Beispiel war der Rest-Parameter das zweite Argument, was nicht möglich ist und daher einen Syntax Error ausgibt.
2973
+
2974
+
```javascript
2975
+
function getItems(fruitList, favoriteFruit, ...args) {
2976
+
return [...fruitList, ...args, favoriteFruit]
2977
+
}
2978
+
2979
+
getItems(["banana", "apple"], "pear", "orange")
2980
+
```
2981
+
2982
+
Dieses Beispiel würde funktionieren und `[ 'banana', 'apple', 'orange', 'pear' ]` ausgeben.
0 commit comments