

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Funktionen von JavaScript Runtime 1.0 für CloudFront-Funktionen
<a name="functions-javascript-runtime-10"></a>

Die JavaScript-Laufzeitumgebung von CloudFront-Funktionen ist mit [ECMAScript (ES) Version 5.1](https://262.ecma-international.org/5.1/) kompatibel und unterstützt auch einige Features der ES-Versionen 6 bis 9. Sie enthält auch einige nicht standardmäßige Methoden, die nicht Teil der ES-Spezifikationen sind. 

In den folgenden Themen werden alle unterstützten Sprachfunktionen aufgeführt.

**Topics**
+ [Kernfunktionen](#writing-functions-javascript-features-core)
+ [Primitive Objekte](#writing-functions-javascript-features-primitive-objects)
+ [Integrierte Objekte](#writing-functions-javascript-features-builtin-objects)
+ [Fehlertypen](#writing-functions-javascript-features-error-types)
+ [Globale](#writing-functions-javascript-features-globals)
+ [Integrierten Module](#writing-functions-javascript-features-builtin-modules)
+ [Eingeschränkte Funktionen](#writing-functions-javascript-features-restricted-features)

## Kernfunktionen
<a name="writing-functions-javascript-features-core"></a>

Die folgenden Kern-Features von ES werden unterstützt.

**Typen**  
Alle ES 5.1-Typen werden unterstützt. Dies umfasst boolesche Werte, Zahlen, Zeichenfolgen, Objekte, Arrays, Funktionen, Funktionskonstruktoren und reguläre Ausdrücke.

**Operatoren**  
Alle ES 5.1-Operatoren werden unterstützt.  
Der Potenzierungsoperator (`**`) wird unterstützt.

**Anweisungen**  
`const`- und `let`-Anweisungen werden nicht unterstützt.
Die folgenden ES 5.1-Anweisungen werden unterstützt:  
+ `break`
+ `catch`
+ `continue`
+ `do-while`
+ `else`
+ `finally`
+ `for`
+ `for-in`
+ `if`
+ `return`
+ `switch`
+ `throw`
+ `try`
+ `var`
+ `while`
+ Bezeichnete Anweisungen

**Literale**  
ES 6-Vorlagenliterale werden unterstützt: mehrzeilige Zeichenfolgen, Interpolation von Ausdrücken und Verschachtelungsvorlagen.

**Funktionen**  
Alle Features von ES 5.1 werden unterstützt.  
ES 6-Pfeilfunktionen werden unterstützt, und die ES 6 Rest-Parametersyntax wird unterstützt.

**Unicode**  
Quelltext und Zeichenfolgenliterale können Unicode-codierte Zeichen enthalten. Unicode-Code-Punkt-Escape-Sequenzen von sechs Zeichen (z. B. `\uXXXX`) werden ebenfalls unterstützt.

**Strikter Modus**  
Funktionen arbeiten standardmäßig im strikten Modus, sodass Sie Ihrem Funktionscode keine `use strict`-Anweisung hinzufügen müssen. Dies können nicht geändert werden.

## Primitive Objekte
<a name="writing-functions-javascript-features-primitive-objects"></a>

Die folgenden primitiven Objekte von ES werden unterstützt.

**Objekt**  
Die folgenden ES 5.1-Methoden für Objekte werden unterstützt:  
+ `create` (ohne Eigenschaftenliste)
+ `defineProperties`
+ `defineProperty`
+ `freeze`
+ `getOwnPropertyDescriptor`
+ `getOwnPropertyNames`
+ `getPrototypeOf`
+ `hasOwnProperty`
+ `isExtensible`
+ `isFrozen`
+ `prototype.isPrototypeOf`
+ `isSealed`
+ `keys`
+ `preventExtensions`
+ `prototype.propertyIsEnumerable`
+ `seal`
+ `prototype.toString`
+ `prototype.valueOf`
Die folgenden ES 6-Methoden für Objekte werden unterstützt:  
+ `assign`
+ `is`
+ `prototype.setPrototypeOf`
Die folgenden ES 8-Methoden für Objekte werden unterstützt:  
+ `entries`
+ `values`

**Zeichenfolge**  
Die folgenden ES 5.1-Methoden für Zeichenfolgen werden unterstützt:  
+ `fromCharCode`
+ `prototype.charAt`
+ `prototype.concat`
+ `prototype.indexOf`
+ `prototype.lastIndexOf`
+ `prototype.match`
+ `prototype.replace`
+ `prototype.search`
+ `prototype.slice`
+ `prototype.split`
+ `prototype.substr`
+ `prototype.substring`
+ `prototype.toLowerCase`
+ `prototype.trim`
+ `prototype.toUpperCase`
Die folgenden ES 6-Methoden für Zeichenfolgen werden unterstützt:  
+ `fromCodePoint`
+ `prototype.codePointAt`
+ `prototype.endsWith`
+ `prototype.includes`
+ `prototype.repeat`
+ `prototype.startsWith`
Die folgenden ES 8-Methoden für Zeichenfolgen werden unterstützt:  
+ `prototype.padStart`
+ `prototype.padEnd`
Die folgenden ES 9-Methoden für Zeichenfolgen werden unterstützt:  
+ `prototype.trimStart`
+ `prototype.trimEnd`
Die folgenden nicht standardmäßigen Methoden für Zeichenfolgen werden unterstützt:  
+ `prototype.bytesFrom(array | string, encoding)`

  Erstellt eine Bytezeichenfolge aus einem Array von Oktetten oder einer codierten Zeichenfolge. Die Optionen für die Zeichenfolgencodierung sind `hex`, `base64` und `base64url`.
+ `prototype.fromBytes(start[, end])`

  Erstellt eine Unicode-Zeichenfolge aus einer Bytezeichenfolge, in der jedes Byte durch den entsprechenden Unicode-Codepunkt ersetzt wird.
+ `prototype.fromUTF8(start[, end])`

  Erstellt eine Unicode-Zeichenfolge aus einer UTF-8-codierten Bytezeichenfolge. Wenn die Codierung falsch ist, wird zurückgegebe `null`.
+ `prototype.toBytes(start[, end])`

  Erstellt eine Bytezeichenfolge aus einer Unicode-Zeichenfolge. Alle Zeichen müssen im Bereich von [0,255] liegen. Wenn nicht, wird zurückgegebe `null`.
+ `prototype.toUTF8(start[, end])`

  Erstellt eine UTF-8-codierte Bytezeichenfolge aus einer Unicode-Zeichenfolge.

**Nummer**  
Alle ES 5.1-Methoden für Zahlen werden unterstützt.  
Die folgenden ES 6-Methoden für Zahlen werden unterstützt:  
+ `isFinite`
+ `isInteger`
+ `isNaN`
+ `isSafeInteger`
+ `parseFloat`
+ `parseInt`
+ `prototype.toExponential`
+ `prototype.toFixed`
+ `prototype.toPrecision`
+ `EPSILON`
+ `MAX_SAFE_INTEGER`
+ `MAX_VALUE`
+ `MIN_SAFE_INTEGER`
+ `MIN_VALUE`
+ `NEGATIVE_INFINITY`
+ `NaN`
+ `POSITIVE_INFINITY`

## Integrierte Objekte
<a name="writing-functions-javascript-features-builtin-objects"></a>

Die folgenden integrierten Objekte von ES werden unterstützt.

**Math-Knoten**  
Alle Mathematikmethoden von ES 5.1 werden unterstützt.  
In der Laufzeitumgebung von CloudFront-Funktionen verwendet die `Math.random()`-Implementierung OpenBSD `arc4random`, das den Zeitstempel der Funktion als Startwert verwendet.
Die folgenden ES 6-Mathematikmethoden werden unterstützt:  
+ `acosh`
+ `asinh`
+ `atanh`
+ `cbrt`
+ `clz32`
+ `cosh`
+ `expm1`
+ `fround`
+ `hypot`
+ `imul`
+ `log10`
+ `log1p`
+ `log2`
+ `sign`
+ `sinh`
+ `tanh`
+ `trunc`
+ `E`
+ `LN10`
+ `LN2`
+ `LOG10E`
+ `LOG2E`
+ `PI`
+ `SQRT1_2`
+ `SQRT2`

**Datum**  
Alle `Date`-Features von ES 5.1 werden unterstützt.  
Aus Sicherheitsgründen gibt `Date` immer den gleichen Wert – die Startzeit der Funktion – während der Lebensdauer einer einzelnen Funktionsausführung zurück. Weitere Informationen finden Sie unter [Eingeschränkte Funktionen](#writing-functions-javascript-features-restricted-features).

**Funktion**  
Die Methoden `apply`, `bind` und `call` werden unterstützt.  
Funktionskonstruktoren werden nicht unterstützt.

**Reguläre Ausdrücke**  
Alle Features für reguläre Ausdrücke von ES 5.1 werden unterstützt. Die Sprache für reguläre Ausdrücke ist Perl-kompatibel. ES 9 benannte Aufnahmegruppen werden unterstützt.

**JSON**  
Alle Funktionen von ES 5.1 JSON werden unterstützt, einschließlich `parse` und `stringify`.

**Array**  
Die folgenden ES 5.1-Methoden für Arrays werden unterstützt:  
+ `isArray`
+ `prototype.concat`
+ `prototype.every`
+ `prototype.filter`
+ `prototype.forEach`
+ `prototype.indexOf`
+ `prototype.join`
+ `prototype.lastIndexOf`
+ `prototype.map`
+ `prototype.pop`
+ `prototype.push`
+ `prototype.reduce`
+ `prototype.reduceRight`
+ `prototype.reverse`
+ `prototype.shift`
+ `prototype.slice`
+ `prototype.some`
+ `prototype.sort`
+ `prototype.splice`
+ `prototype.unshift`
Die folgenden ES 6-Methoden für Arrays werden unterstützt:  
+ `of`
+ `prototype.copyWithin`
+ `prototype.fill`
+ `prototype.find`
+ `prototype.findIndex`
Die folgenden ES 7-Methoden für Arrays werden unterstützt:  
+ `prototype.includes`

**Eingegebene Arrays**  
Die folgenden von ES 6 eingegebenen Arrays werden unterstützt:  
+ `Int8Array`
+ `Uint8Array`
+ `Uint8ClampedArray`
+ `Int16Array`
+ `Uint16Array`
+ `Int32Array`
+ `Uint32Array`
+ `Float32Array`
+ `Float64Array`
+ `prototype.copyWithin`
+ `prototype.fill`
+ `prototype.join`
+ `prototype.set`
+ `prototype.slice`
+ `prototype.subarray`
+ `prototype.toString`

**ArrayBuffer**  
Die folgenden Methoden für `ArrayBuffer` werden unterstützt:  
+ `prototype.isView`
+ `prototype.slice`

**Promise**  
Die folgenden Methoden für Versprechen werden unterstützt:  
+ `reject`
+ `resolve`
+ `prototype.catch`
+ `prototype.finally`
+ `prototype.then`

**Crypto**  
Das kryptografische Modul bietet standardmäßige Hashing- und Hash-basierte HMAC-Helfer (Message Authentication Code). Sie können das Modul mit lade `require('crypto')`. Das Modul stellt die folgenden Methoden bereit, die sich genau wie ihre Gegenstücke von Node.js verhalten:  
+ `createHash(algorithm)`
+ `hash.update(data)`
+ `hash.digest([encoding])`
+ `createHmac(algorithm, secret key)`
+ `hmac.update(data)`
+ `hmac.digest([encoding])`
Weitere Informationen finden Sie unter [Krypto (Hash und HMAC)](#writing-functions-javascript-features-builtin-modules-crypto) im Abschnitt über integrierte Module.

**Konsole**  
Dies ist ein Hilfsobjekt zum Debuggen. Es unterstützt nur die `log()`-Methode, um Protokollnachrichten aufzuzeichnen.  
CloudFront Functions unterstützt keine Kommasyntax, wie z. B. `console.log('a', 'b')`. Verwenden Sie stattdessen das Format `console.log('a' + ' ' + 'b')`.

## Fehlertypen
<a name="writing-functions-javascript-features-error-types"></a>

Die folgenden Fehlerobjekte werden unterstützt:
+ `Error`
+ `EvalError`
+ `InternalError`
+ `MemoryError`
+ `RangeError`
+ `ReferenceError`
+ `SyntaxError`
+ `TypeError`
+ `URIError`

## Globale
<a name="writing-functions-javascript-features-globals"></a>

Das `globalThis`-Objekt wird unterstützt.

Die folgenden globalen Funktionen von ES 5.1 werden unterstützt:
+ `decodeURI`
+ `decodeURIComponent`
+ `encodeURI`
+ `encodeURIComponent`
+ `isFinite`
+ `isNaN`
+ `parseFloat`
+ `parseInt`

Die folgenden globalen Konstanten werden unterstützt:
+ `NaN`
+ `Infinity`
+ `undefined`

## Integrierten Module
<a name="writing-functions-javascript-features-builtin-modules"></a>

Die folgenden integrierten Module werden unterstützt.

**Topics**
+ [Krypto (Hash und HMAC)](#writing-functions-javascript-features-builtin-modules-crypto)
+ [Abfragezeichenfolge](#writing-functions-javascript-features-builtin-modules-query-string)

### Krypto (Hash und HMAC)
<a name="writing-functions-javascript-features-builtin-modules-crypto"></a>

Das kryptographische Modul (`crypto`) bietet standardmäßige Hashing- und HMAC-Helfer (Hash-basierter Nachrichtenauthentifizierungscode). Sie können das Modul mit lade `require('crypto')`. Das Modul bietet die folgenden Methoden, die sich genau wie ihre Gegenstücke von Node.js verhalten.

**Hashing-Methoden**

`crypto.createHash(algorithm)`  
Erstellt und gibt ein Hash-Objekt zurück, mit dem Sie Hash-Digests mit dem angegebenen Algorithmus generieren können: `md5`, `sha1` oder `sha256`.

`hash.update(data)`  
Aktualisiert den Hash-Inhalt mit dem angegebenen `data`.

`hash.digest([encoding])`  
Berechnet den Digest aller mit übergebenen Date `hash.update()`. Die Codierung kann `hex`, `base64` oder `base64url` sein.

**HMAC-Methoden**

`crypto.createHmac(algorithm, secret key)`  
Erstellt und gibt ein HMAC-Objekt zurück, das das angegebene `algorithm` und `secret key` verwendet. Der Algorithmus kann `md5`, `sha1` oder `sha256` sein.

`hmac.update(data)`  
Aktualisiert den HMAC-Inhalt mit den angegebenen `data`.

`hmac.digest([encoding])`  
Berechnet den Digest aller mit übergebenen Date `hmac.update()`. Die Codierung kann `hex`, `base64` oder `base64url` sein.

### Abfragezeichenfolge
<a name="writing-functions-javascript-features-builtin-modules-query-string"></a>

**Anmerkung**  
Das [CloudFront Functions-Ereignisobjekt](functions-event-structure.md) parst automatisch URL-Abfragezeichenfolgen für Sie. Das bedeutet, dass Sie dieses Modul in den meisten Fällen nicht verwenden müssen.

Das Modul für Abfragezeichenfolgen (`querystring`) bietet Methoden zum Analysieren und Formatieren von URL-Abfragezeichenfolgen. Sie können das Modul mit lade `require('querystring')`. Das Modul bietet die folgenden Methoden.

`querystring.escape(string)`  
URL-kodiert die angegebene `string` und gibt eine entflohene Abfragezeichenfolge zurück. Die Methode wird von `querystring.stringify()` verwendet und sollte nicht direkt verwendet werden.

`querystring.parse(string[, separator[, equal[, options]]])`  
Analysiert eine Abfragezeichenfolge (`string`) und gibt ein Objekt zurück.  
Der `separator`-Parameter ist eine Teilzeichenfolge zum Abgrenzen von Schlüssel- und Wertepaaren in der Abfragezeichenfolge. Standardmäßig ist dies `&`.  
Der `equal`-Parameter ist eine Teilzeichenfolge zum Abgrenzen von Schlüsseln und Werten in der Abfragezeichenfolge. Standardmäßig ist dies `=`.  
Der `options`-Parameter ist ein Objekt mit den folgenden Schlüsseln:    
`decodeURIComponent function`  
Eine Funktion zum Entschlüsseln von prozentkodierten Zeichen in der Abfragezeichenfolge. Standardmäßig ist dies `querystring.unescape()`.  
`maxKeys number`  
Die maximale Anzahl der Schlüssel zum Parsen. Standardmäßig ist dies `1000`. Verwenden Sie den Wert `0`, um die Beschränkungen für das Zählen von Schlüsseln aufzuheben.
Standardmäßig wird davon ausgegangen, dass prozentcodierte Zeichen innerhalb der Abfragezeichenfolge die UTF-8-Codierung verwenden. Ungültige UTF-8-Sequenzen werden durch das Ersatzzeichen `U+FFFD` ersetzt.  
Zum Beispiel für die folgende Abfragezeichenfolge:  

```
'name=value&abc=xyz&abc=123'
```
Der Rückgabewert von `querystring.parse()` ist:  

```
{
name: 'value',
abc: ['xyz', '123']
}
```
`querystring.decode()` ist ein Alias für `querystring.parse()`.

`querystring.stringify(object[, separator[, equal[, options]]])`  
Serialisiert ein `object` und gibt eine Abfragezeichenfolge zurück.  
Der `separator`-Parameter ist eine Teilzeichenfolge zum Abgrenzen von Schlüssel- und Wertepaaren in der Abfragezeichenfolge. Standardmäßig ist dies `&`.  
Der `equal`-Parameter ist eine Teilzeichenfolge zum Abgrenzen von Schlüsseln und Werten in der Abfragezeichenfolge. Standardmäßig ist dies `=`.  
Der `options`-Parameter ist ein Objekt mit den folgenden Schlüsseln:    
`encodeURIComponent function`  
Die Funktion, die zum Konvertieren von URL-unsicheren Zeichen in die prozentuale Kodierung in der Abfragezeichenfolge verwendet wird. Standardmäßig ist dies `querystring.escape()`.
Standardmäßig werden Zeichen, die eine prozentuale Kodierung innerhalb der Abfragezeichenfolge erfordern, als UTF-8 codiert. Um eine andere Codierung zu verwenden, geben Sie die Option `encodeURIComponent` an.  
Zum Beispiel für den folgenden Code:  

```
querystring.stringify({ name: 'value', abc: ['xyz', '123'], anotherName: '' });
```
Der Rückgabewert ist:  

```
'name=value&abc=xyz&abc=123&anotherName='
```
`querystring.encode()` ist ein Alias für `querystring.stringify()`.

`querystring.unescape(string)`  
Dekodiert die prozentualen Zeichen der URL in der angegebenen `string` und gibt eine nicht entdeckene Abfragezeichenfolge zurück. Diese Methode wird von `querystring.parse()` verwendet und sollte nicht direkt verwendet werden.

## Eingeschränkte Funktionen
<a name="writing-functions-javascript-features-restricted-features"></a>

Die folgenden JavaScript-Sprach-Features werden aufgrund von Sicherheitsbedenken entweder nicht unterstützt oder eingeschränkt.

**Dynamische Codeauswertung**  
Die dynamische Codeauswertung wird nicht unterstützt. Sowohl `eval()`- als auch `Function`-Konstruktoren geben einen Fehler aus, wenn sie versucht werden. Zum Beispiel gibt `const sum = new Function('a', 'b', 'return a + b')` einen Fehler aus.

**Timer **  
Die Funktionen `setTimeout()`, `setImmediate()` und `clearTimeout()` werden nicht unterstützt. Es gibt keine Bestimmung, innerhalb einer Funktionsausführung zu verschieben oder zu ergeben. Ihre Funktion muss synchron bis zum Abschluss ausgeführt werden.

**Datum und Zeitstempel**  
Aus Sicherheitsgründen besteht kein Zugang zu hochauflösenden Timern. Alle `Date`-Methoden zum Abfragen der aktuellen Uhrzeit geben während der Lebensdauer einer einzelnen Funktionsausführung immer den gleichen Wert zurück. Der zurückgegebene Zeitstempel ist die Zeit, zu der die Funktion gestartet wurde. Folglich können Sie die verstrichene Zeit in Ihrer Funktion nicht messen.

**Zugriff auf das Dateisystem**  
Es gibt keinen Zugriff auf das Dateisystem. Zum Beispiel gibt es kein `fs`-Modul für den Dateisystemzugriff wie in Node.js.

**Prozesszugriff**  
Es gibt keinen Prozesszugriff. Zum Beispiel gibt es kein globales `process`-Objekt für die Verarbeitung von Informationszugriffen wie in Node.js.

**Umgebungsvariablen**  
Es gibt keinen Zugriff auf Umgebungsvariablen.   
Stattdessen können Sie CloudFront KeyValueStore verwenden, um einen zentralen Datenspeicher mit Schlüssel-Wert-Paaren für CloudFront Functions zu erstellen. CloudFront KeyValueStore ermöglicht dynamische Updates Ihrer Konfigurationsdaten, ohne dass Codeänderungen implementiert werden müssen. Sie müssen die [JavaScript-Laufzeitumgebung 2.0](functions-javascript-runtime-20.md) verwenden, um CloudFront KeyValueStore verwenden zu können. Weitere Informationen finden Sie unter [Amazon CloudFront Schlüsselwertspeicher](kvs-with-functions.md).

**Netzwerkzugriff**  
Es gibt keine Unterstützung für Netzwerkaufrufe. Zum Beispiel werden XHR, HTTP(S) und Socket nicht unterstützt.