Skip to content

Commit c3e178e

Browse files
authored
Added questions 55-63 and added new languages
1 parent 6ab723a commit c3e178e

File tree

1 file changed

+303
-0
lines changed

1 file changed

+303
-0
lines changed

README-de_DE.md

+303
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@ Von einfach bis fortgeschritten: teste wie gut du JavaScript kennst, frische dei
66

77
Die Antworten sind unterhalb der Fragen versteckt. Du kannst einfach darauf klicken um die Antworten anzuzeigen. Viel Glück :heart:
88

9+
### Andere verfügbare Sprachen
910
[English](./README.md) <br />
1011
[Bosanski Jezik](./README-bs_BS.md) <br />
1112
[日本語](./README-ja_JA.md) <br />
13+
[한국어](./README-ko_KR.md) <br />
14+
[Português Brasil](./README_pt_BR.md) <br />
1215
[Русский](./README_ru-RU.md) <br />
1316
[Українська мова](./README-ua_UA.md) <br />
1417
[Tiếng Việt](./README-vi.md) <br />
@@ -1653,3 +1656,303 @@ Da wir die Variable `y` aber global erstellt haben ist ihr Wert `10` auch hier v
16531656

16541657
</p>
16551658
</details>
1659+
1660+
1661+
---
1662+
1663+
###### 55. Was ist der Output?
1664+
1665+
```javascript
1666+
class Dog {
1667+
constructor(name) {
1668+
this.name = name;
1669+
}
1670+
}
1671+
1672+
Dog.prototype.bark = function() {
1673+
console.log(`Woof I am ${this.name}`);
1674+
};
1675+
1676+
const pet = new Dog("Mara");
1677+
1678+
pet.bark();
1679+
1680+
delete Dog.prototype.bark;
1681+
1682+
pet.bark();
1683+
```
1684+
1685+
- A: `"Woof I am Mara"`, `TypeError`
1686+
- B: `"Woof I am Mara"`,`"Woof I am Mara"`
1687+
- C: `"Woof I am Mara"`, `undefined`
1688+
- D: `TypeError`, `TypeError`
1689+
1690+
<details><summary><b>Antwort</b></summary>
1691+
<p>
1692+
1693+
#### Antwort: A
1694+
1695+
Properties von Objekten können mit dem `delete` Keyword entfernt werden, selbst am Prototype. Beim entfernen von Properties am Prototype ist zu beachten, dass diese dann aus der Prototypen-Kette verschwinden. In unserem Fall existiert die `bark` Funktion nicht mehr am Prototype nachdem `delete Dog.prototype.bark` ausgeführt wurde.
1696+
1697+
Wenn wir versuchen etwas auszuführen, was keine Funktion ist, wird ein `TypeError` ausgeworfen. In diesem Fall `TypeError: pet.bark is not a function`, da `pet.bark` `undefined` ist.
1698+
1699+
</p>
1700+
</details>
1701+
1702+
---
1703+
1704+
###### 56. Was ist der Output?
1705+
1706+
```javascript
1707+
const set = new Set([1, 1, 2, 3, 4]);
1708+
1709+
console.log(set);
1710+
```
1711+
1712+
- A: `[1, 1, 2, 3, 4]`
1713+
- B: `[1, 2, 3, 4]`
1714+
- C: `{1, 1, 2, 3, 4}`
1715+
- D: `{1, 2, 3, 4}`
1716+
1717+
<details><summary><b>Antwort</b></summary>
1718+
<p>
1719+
1720+
#### Antwort: D
1721+
1722+
Das `Set` Objekt ist eine Sammlung von _eindeutigen_ Werten: jeder Wert kann nur ein Mal in einem Set vorkommen.
1723+
1724+
Wir übergeben `[1, 1, 2, 3, 4]` mit einer doppelten `1`. Da wir keine doppelten Werte in einem Set haben können wird eine `1` entfernt. Das Ergebnis ist `{1, 2, 3, 4}`.
1725+
1726+
</p>
1727+
</details>
1728+
1729+
---
1730+
1731+
###### 57. Was ist der Output?
1732+
1733+
```javascript
1734+
// counter.js
1735+
let counter = 10;
1736+
export default counter;
1737+
```
1738+
1739+
```javascript
1740+
// index.js
1741+
import myCounter from "./counter";
1742+
1743+
myCounter += 1;
1744+
1745+
console.log(myCounter);
1746+
```
1747+
1748+
- A: `10`
1749+
- B: `11`
1750+
- C: `Error`
1751+
- D: `NaN`
1752+
1753+
<details><summary><b>Antwort</b></summary>
1754+
<p>
1755+
1756+
#### Antwort: C
1757+
1758+
Ein importiertes Modul ist _read-only_, was bedeutet, dass importierte Module nicht geändert werden können. Nur das Modul, welches diese exportiert kann deren Wert ändern.
1759+
1760+
Wenn wir also den Wert von `myCounter` erhöhen bekommen wir den Fehler `myCounter is read-only and cannot be modified`.
1761+
1762+
</p>
1763+
</details>
1764+
1765+
---
1766+
1767+
###### 58. Was ist der Output?
1768+
1769+
```javascript
1770+
const name = "Lydia";
1771+
age = 21;
1772+
1773+
console.log(delete name);
1774+
console.log(delete age);
1775+
```
1776+
1777+
- A: `false`, `true`
1778+
- B: `"Lydia"`, `21`
1779+
- C: `true`, `true`
1780+
- D: `undefined`, `undefined`
1781+
1782+
<details><summary><b>Antwort</b></summary>
1783+
<p>
1784+
1785+
#### Antwort: A
1786+
1787+
Der `delete` Operator gibt einen Boolean Wert zurück: `true` bei erfolgreichem entfernen, oder andernfalls `false`. Variablen, die mit `var`, `let` oder `const` deklariert werden, können andererseits nicht mit `delete` entfernt werden.
1788+
1789+
Der Wert von `name` wurde mit `const` deklariert, weshalb `delete` nicht möglich ist und `false` zurückgegeben wird. Als wir `age` den Wert `21` zugewiesen haben, haben wir eine Property `age` zum globalen Objekt hinzugefügt. Diese Properties kann man mit `delete` entfernen, sodass `delete age` `true` zurückgibt.
1790+
1791+
</p>
1792+
</details>
1793+
1794+
---
1795+
1796+
###### 59. Was ist der Output?
1797+
1798+
```javascript
1799+
const numbers = [1, 2, 3, 4, 5];
1800+
const [y] = numbers;
1801+
1802+
console.log(y);
1803+
```
1804+
1805+
- A: `[[1, 2, 3, 4, 5]]`
1806+
- B: `[1, 2, 3, 4, 5]`
1807+
- C: `1`
1808+
- D: `[1]`
1809+
1810+
<details><summary><b>Antwort</b></summary>
1811+
<p>
1812+
1813+
#### Antwort: C
1814+
1815+
Wir können durch Destructuring Werte aus Arrays oder Properties aus Objekten entpacken. Zum Beispiel:
1816+
1817+
```javascript
1818+
[a, b] = [1, 2];
1819+
```
1820+
1821+
<img src="https://i.imgur.com/ADFpVop.png" width="200">
1822+
1823+
Der Wert von `a` ist jetzt `1` und der Wert von `b` ist jetzt `2`. Was wir in der Frage eigentlich getan haben ist:
1824+
1825+
```javascript
1826+
[y] = [1, 2, 3, 4, 5];
1827+
```
1828+
1829+
<img src="https://i.imgur.com/NzGkMNk.png" width="200">
1830+
1831+
Das bedeutet, dass der Wert von `y` gleich des ersten Wertes im Array ist, sprich der Zahl `1` entspricht. Wenn wir `y` loggen bekommen wir `1` ausgegeben.
1832+
1833+
</p>
1834+
</details>
1835+
1836+
---
1837+
1838+
###### 60. Was ist der Output?
1839+
1840+
```javascript
1841+
const user = { name: "Lydia", age: 21 };
1842+
const admin = { admin: true, ...user };
1843+
1844+
console.log(admin);
1845+
```
1846+
1847+
- A: `{ admin: true, user: { name: "Lydia", age: 21 } }`
1848+
- B: `{ admin: true, name: "Lydia", age: 21 }`
1849+
- C: `{ admin: true, user: ["Lydia", 21] }`
1850+
- D: `{ admin: true }`
1851+
1852+
<details><summary><b>Antwort</b></summary>
1853+
<p>
1854+
1855+
#### Antwort: B
1856+
1857+
Es ist möglich Objekte mit dem Spread Operator `...` zu verbinden. Dieser erstellt Kopien der Key/Value Paare eines Objektes und fügt diese dem anderen Objekt hinzu. In diesem Fall wird eine Kopie des `user` Objekts erstellt und dem `admin` Objekt zugewiesen. Das `admin` Objekt beinhaltet nun die kopierten Key/Value Paare, sodass das Ergebnis `{ admin: true, name: "Lydia", age: 21 }` ist.
1858+
1859+
</p>
1860+
</details>
1861+
1862+
---
1863+
1864+
###### 61. Was ist der Output?
1865+
1866+
```javascript
1867+
const person = { name: "Lydia" };
1868+
1869+
Object.defineProperty(person, "age", { value: 21 });
1870+
1871+
console.log(person);
1872+
console.log(Object.keys(person));
1873+
```
1874+
1875+
- A: `{ name: "Lydia", age: 21 }`, `["name", "age"]`
1876+
- B: `{ name: "Lydia", age: 21 }`, `["name"]`
1877+
- C: `{ name: "Lydia"}`, `["name", "age"]`
1878+
- D: `{ name: "Lydia"}`, `["age"]`
1879+
1880+
<details><summary><b>Antwort</b></summary>
1881+
<p>
1882+
1883+
#### Antwort: B
1884+
1885+
Mit der `defineProperty` Methode können wir neue Properties zu einem Objekt hinzufügen oder bestehende modifizieren. Wenn wir mit der `defineProperty` Methode Properties einem Objekt hinzufügen, sind diese standardmäßig _nicht zählbar_. Die `Object.keys` Methode gibt alle _zählbaren_ Property Namen eines Objektes zurück, in diesem Fall nur `"name"`.
1886+
1887+
Properties, die mit `defineProperty` erstellt wurden sind standardmäßig unveränderbar. Man kann dieses Verhalten mit den `writable`, `configurable` und `enumerable` Properties verändern. Auf diese Art gibt die `defineProperty` Methode mehr Kontrolle über die Properties, die einem Objekt hinzugefügt werden.
1888+
1889+
</p>
1890+
</details>
1891+
1892+
---
1893+
1894+
###### 62. Was ist der Output?
1895+
1896+
```javascript
1897+
const settings = {
1898+
username: "lydiahallie",
1899+
level: 19,
1900+
health: 90
1901+
};
1902+
1903+
const data = JSON.stringify(settings, ["level", "health"]);
1904+
console.log(data);
1905+
```
1906+
1907+
- A: `"{"level":19, "health":90}"`
1908+
- B: `"{"username": "lydiahallie"}"`
1909+
- C: `"["level", "health"]"`
1910+
- D: `"{"username": "lydiahallie", "level":19, "health":90}"`
1911+
1912+
<details><summary><b>Antwort</b></summary>
1913+
<p>
1914+
1915+
#### Antwort: A
1916+
1917+
Das zweite Argument von `JSON.stringify` ist ein _Replacer_. Der Replacer kann entweder eine Funktion oder ein Array sein und gibt uns Kontrolle darüber, wie die Werte in Strings umgewandelt werden sollen.
1918+
1919+
Wenn der Replacer ein _Array_ ist, werden nur die Properties dem JSON String hinzugefügt, die in dem Array aufgeführt sind. In diesem Fall sind das nur `"level"` und `"health"`. `"username"` ist ausgeschlossen. `data` ist jetzt gleich `"{"level":19, "health":90}"`.
1920+
1921+
Wenn der Replacer eine _Funktion_ ist, so wird diese Funktion für jede Property im Objekt aufgerufen, die in Strings umgewandelt wird. Der Wert, den die Funktion zurückgibt, ist der Wert der Property, die dem JSON String hinzugefügt wird. Ist der Wert `undefined`, so wird die Property ausgeschlossen.
1922+
1923+
</p>
1924+
</details>
1925+
1926+
---
1927+
1928+
###### 63. Was ist der Output?
1929+
1930+
```javascript
1931+
let num = 10;
1932+
1933+
const increaseNumber = () => num++;
1934+
const increasePassedNumber = number => number++;
1935+
1936+
const num1 = increaseNumber();
1937+
const num2 = increasePassedNumber(num1);
1938+
1939+
console.log(num1);
1940+
console.log(num2);
1941+
```
1942+
1943+
- A: `10`, `10`
1944+
- B: `10`, `11`
1945+
- C: `11`, `11`
1946+
- D: `11`, `12`
1947+
1948+
<details><summary><b>Antwort</b></summary>
1949+
<p>
1950+
1951+
#### Antwort: A
1952+
1953+
Der unäre Operator `++` _gibt zuerst_ den Wert des Operanden aus und _erhöht danach_ den Wert des Operanden. Der Wert `num1` ist `10`, da `increaseNumber` zuerst den Wert von `num1` (`10`) ausgibt und ihn danach erhöht.
1954+
1955+
`num2` ist gleich `10`, da wir `num1` `increasePassedNumber` zugewiesen haben. `number` ist gleich `10` (der Wert von `num1`). Der unäre Operator `++` gibt erneut _zuerst_ den Wert des Operanden aus und _erhöht danach_ den Wert. Der Wert von `number` ist `10`, sodass `num2` ebenfalls `10` ist.
1956+
1957+
</p>
1958+
</details>

0 commit comments

Comments
 (0)