

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# JavaScript fitur runtime 1.0 untuk Fungsi CloudFront
<a name="functions-javascript-runtime-10"></a>

Lingkungan JavaScript runtime CloudFront Functions sesuai dengan [ECMAScript (ES) versi 5.1](https://262.ecma-international.org/5.1/) dan juga mendukung beberapa fitur ES versi 6 hingga 9. Lingkungan ini juga menyediakan beberapa metode standar yang bukan bagian dari spesifikasi ES. 

Topik berikut mencantumkan semua fitur bahasa yang didukung.

**Topics**
+ [Fitur inti](#writing-functions-javascript-features-core)
+ [Objek primitif](#writing-functions-javascript-features-primitive-objects)
+ [Objek bawaan](#writing-functions-javascript-features-builtin-objects)
+ [Jenis kesalahan](#writing-functions-javascript-features-error-types)
+ [Global](#writing-functions-javascript-features-globals)
+ [Modul bawaan](#writing-functions-javascript-features-builtin-modules)
+ [Fitur yang dibatasi](#writing-functions-javascript-features-restricted-features)

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

Mendukung fitur inti ES berikut.

**Jenis**  
Mendukung semua jenis ES 5.1. Ini termasuk nilai, angka, string, objek, susunan, fungsi, konstruktor fungsi, dan ekspresi reguler Boolean.

**Operator**  
Mendukung Semua operator ES 5.1 didukung.  
Mendukung operator eksponensial ES 7 (`**`).

**Pernyataan**  
Tidak mendukung pernyataan `const` dan `let`.
Mendukung pernyataan ES 5.1 berikut:  
+ `break`
+ `catch`
+ `continue`
+ `do-while`
+ `else`
+ `finally`
+ `for`
+ `for-in`
+ `if`
+ `return`
+ `switch`
+ `throw`
+ `try`
+ `var`
+ `while`
+ Pernyataan berlabel

**Literal**  
Literal template ES 6 didukung: string multiline, interpolasi ekspresi, dan templat bersarang.

**Fungsi**  
Mendukung semua fitur fungsi ES 5.1.  
Mendukung fungsi panah ES 6 didukung, dan sintaks parameter ES 6 sintaks parameter istirahat.

**Unicode**  
Sumber teks dan literal string dapat berisi karakter Unicode yang dikodekan. Juga mendukung unicode code point escape sequence enam karakter (misalnya, `\uXXXX`).

**Mode ketat**  
Fungsi beroperasi dalam mode ketat secara default, sehingga Anda tidak perlu menambahkan pernyataan `use strict` dalam kode fungsi Anda. Ini tidak dapat diubah.

## Objek primitif
<a name="writing-functions-javascript-features-primitive-objects"></a>

Mendukung objek primitif ES berikut.

**Objek**  
Mendukung metode ES 5.1 berikut pada objek:  
+ `create` (tanpa daftar properti)
+ `defineProperties`
+ `defineProperty`
+ `freeze`
+ `getOwnPropertyDescriptor`
+ `getOwnPropertyNames`
+ `getPrototypeOf`
+ `hasOwnProperty`
+ `isExtensible`
+ `isFrozen`
+ `prototype.isPrototypeOf`
+ `isSealed`
+ `keys`
+ `preventExtensions`
+ `prototype.propertyIsEnumerable`
+ `seal`
+ `prototype.toString`
+ `prototype.valueOf`
Mendukung metode ES 6 berikut pada objek:  
+ `assign`
+ `is`
+ `prototype.setPrototypeOf`
Mendukung metode ES 8 berikut pada objek:  
+ `entries`
+ `values`

**String**  
Mendukung metode ES 5.1 berikut pada string:  
+ `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`
Mendukung metode ES 6 berikut pada string:  
+ `fromCodePoint`
+ `prototype.codePointAt`
+ `prototype.endsWith`
+ `prototype.includes`
+ `prototype.repeat`
+ `prototype.startsWith`
Mendukung metode ES 8 berikut pada string:  
+ `prototype.padStart`
+ `prototype.padEnd`
Mendukung metode ES 9 berikut pada string:  
+ `prototype.trimStart`
+ `prototype.trimEnd`
Mendukung metode tidak standar berikut pada string:  
+ `prototype.bytesFrom(array | string, encoding)`

  Menciptakan string byte dari susunan oktet atau string yang dikodekan. Opsi pengkodean string adalah `hex`, `base64`, dan `base64url`.
+ `prototype.fromBytes(start[, end])`

  Menciptakan string Unicode dari string byte di mana setiap byte diganti dengan titik kode Unicode yang sesuai.
+ `prototype.fromUTF8(start[, end])`

  Menciptakan string Unicode dari UTF-8 string byte yang dikodekan. Jika pengkodean salah, akan muncul `null`.
+ `prototype.toBytes(start[, end])`

  Menciptakan string byte dari string Unicode. Semua karakter harus dalam rentang [0,255]. Jika tidak, akan muncul `null`.
+ `prototype.toUTF8(start[, end])`

  Menciptakan UTF-8 string byte yang dikodekan dari string Unicode.

**Nomor**  
Mendukung semua metode ES 5.1 pada nomor.  
Mendukung metode ES 6 berikut pada nomor:  
+ `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`

## Objek bawaan
<a name="writing-functions-javascript-features-builtin-objects"></a>

Mendukung objek ES bawaan berikut.

**Matematika**  
Mendukung semua metode matematika ES 5.1.  
Di lingkungan runtime CloudFront Functions, `Math.random()` implementasi menggunakan `arc4random` OpenBSD yang diunggulkan dengan stempel waktu saat fungsi berjalan.
Mendukung metode matematika ES 6 berikut:  
+ `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`

**Tanggal**  
Mendukung semua fitur ES 5.1 `Date`.  
Untuk alasan keamanan, `Date` selalu mengembalikan nilai yang sama—waktu mulai fungsi ini—saat menjalankan fungsi tunggal. Untuk informasi selengkapnya, lihat [Fitur yang dibatasi](#writing-functions-javascript-features-restricted-features).

**Fungsi**  
Mendukung metode `apply`, `bind`, dan `call`.  
Tidak mendukung konstruktor fungsi.

**Ekspresi reguler**  
Mendukung semua fitur ekspresi reguler ES 5.1. Bahasa ekspresi reguler adalah kompatibel dengan Perl. Mendukung kelompok penangkap bernama ES 9.

**JSON**  
Mendukung semua fitur JSON ES 5.1 JSON, termasuk `parse` dan `stringify`.

**Susunan**  
Mendukung metode ES 5.1 berikut pada susunan:  
+ `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`
Mendukung metode ES 6 berikut pada susunan:  
+ `of`
+ `prototype.copyWithin`
+ `prototype.fill`
+ `prototype.find`
+ `prototype.findIndex`
Mendukung metode ES 7 berikut pada susunan:  
+ `prototype.includes`

**Susunan yang dijeniskan**  
Mendukung susunan yang diketik ES 6 berikut:  
+ `Int8Array`
+ `Uint8Array`
+ `Uint8ClampedArray`
+ `Int16Array`
+ `Uint16Array`
+ `Int32Array`
+ `Uint32Array`
+ `Float32Array`
+ `Float64Array`
+ `prototype.copyWithin`
+ `prototype.fill`
+ `prototype.join`
+ `prototype.set`
+ `prototype.slice`
+ `prototype.subarray`
+ `prototype.toString`

**ArrayBuffer**  
Mendukung metode pada `ArrayBuffer` berikut:  
+ `prototype.isView`
+ `prototype.slice`

**Janji**  
Mendukung metode janji berikut:  
+ `reject`
+ `resolve`
+ `prototype.catch`
+ `prototype.finally`
+ `prototype.then`

**Kripto**  
Modul kriptografi menyediakan hashing standar dan pembantu kode autentikasi pesan berbasis hash (HMAC). Anda dapat memuat modul menggunakan `require('crypto')`. Modul ini memperlihatkan metode berikut yang berperilaku persis seperti rekan-rekan Node.js mereka:  
+ `createHash(algorithm)`
+ `hash.update(data)`
+ `hash.digest([encoding])`
+ `createHmac(algorithm, secret key)`
+ `hmac.update(data)`
+ `hmac.digest([encoding])`
Untuk informasi lebih lanjut, lihat [Kripto (hash dan HMAC)](#writing-functions-javascript-features-builtin-modules-crypto) di bagian modul bawaan.

**Konsol**  
Ini adalah objek pembantu untuk debugging. Ini hanya mendukung metode `log()`, untuk merekam pesan log.  
CloudFront Fungsi tidak mendukung sintaks koma, seperti. `console.log('a', 'b')` Sebagai gantinya, gunakan `console.log('a' + ' ' + 'b')` formatnya.

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

Mendukung objek kesalahan berikut:
+ `Error`
+ `EvalError`
+ `InternalError`
+ `MemoryError`
+ `RangeError`
+ `ReferenceError`
+ `SyntaxError`
+ `TypeError`
+ `URIError`

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

Mendukung objek `globalThis`.

Mendukung fungsi global ES 5.1 berikut:
+ `decodeURI`
+ `decodeURIComponent`
+ `encodeURI`
+ `encodeURIComponent`
+ `isFinite`
+ `isNaN`
+ `parseFloat`
+ `parseInt`

Mendukung konstanta global berikut:
+ `NaN`
+ `Infinity`
+ `undefined`

## Modul bawaan
<a name="writing-functions-javascript-features-builtin-modules"></a>

Mendukung modul bawaan berikut.

**Topics**
+ [Kripto (hash dan HMAC)](#writing-functions-javascript-features-builtin-modules-crypto)
+ [String kueri](#writing-functions-javascript-features-builtin-modules-query-string)

### Kripto (hash dan HMAC)
<a name="writing-functions-javascript-features-builtin-modules-crypto"></a>

Modul kriptografi (`crypto`) menyediakan hashing standar dan pembantu kode autentikasi pesan berbasis hash (HMAC). Anda dapat memuat modul menggunakan `require('crypto')`. Modul ini menyediakan metode berikut yang berperilaku persis seperti rekan-rekan Node.js mereka.

**Metode hashing**

`crypto.createHash(algorithm)`  
Menciptakan dan mengembalikan objek hash yang dapat digunakan untuk menghasilkan hash digests menggunakan algoritme yang diberikan: `md5`, `sha1`, atau `sha256`.

`hash.update(data)`  
Update konten hash dengan `data` yang tersedia.

`hash.digest([encoding])`  
Menghitung digest dari semua data yang diteruskan menggunakan `hash.update()`. Pengkodean dapat berupa `hex`, `base64`, atau `base64url`.

**Metode HMAC**

`crypto.createHmac(algorithm, secret key)`  
Menciptakan dan mengembalikan objek HMAC yang menggunakan `algorithm` dan `secret key` yang tersedia. Algoritma dapat berupa `md5`, `sha1`, atau `sha256`.

`hmac.update(data)`  
Memperbarui konten HMAC dengan `data` yang tersedia.

`hmac.digest([encoding])`  
Menghitung digest dari semua data yang diteruskan menggunakan `hmac.update()`. Pengkodean dapat berupa `hex`, `base64`, atau `base64url`.

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

**catatan**  
[Objek acara CloudFront Functions](functions-event-structure.md) secara otomatis mem-parsing string kueri URL untuk Anda. Itu berarti bahwa dalam kebanyakan kasus Anda tidak perlu menggunakan modul ini.

Modul string kueri (`querystring`) menyediakan metode untuk mengurai dan memformat string kueri URL. Anda dapat memuat modul menggunakan `require('querystring')`. Modul ini menyediakan metode berikut.

`querystring.escape(string)`  
Mengkodekan URL `string` yang tersedia, mengembalikan string kueri yang lolos. Metode ini digunakan oleh `querystring.stringify()` dan tidak boleh digunakan secara langsung.

`querystring.parse(string[, separator[, equal[, options]]])`  
Mengurai string kueri (`string`) dan mengembalikan objek.  
Parameter `separator` adalah substring untuk membatasi pasangan kunci dan nilai dalam string kueri. Secara default, itu adalah `&`.  
Parameter `equal` adalah substring untuk membatasi kunci dan nilai dalam string kueri. Secara default, itu adalah `=`.  
Parameter `options` adalah objek dengan kunci berikut:    
`decodeURIComponent function`  
Sebuah fungsi untuk memecahkan kode karakter persentase dikodekan dalam string kueri. Secara default, itu adalah `querystring.unescape()`.  
`maxKeys number`  
Jumlah kunci maksimum untuk diurai Secara default, itu adalah `1000`. Gunakan nilai `0` untuk menghapus pembatasan untuk menghitung kunci.
Secara default, karakter persentase dikodekan dalam string kueri diasumsikan menggunakan pengkodean UTF-8. Urutan UTF-8 tidak valid diganti dengan karakter pengganti `U+FFFD`.  
Misalnya, untuk string kueri berikut:  

```
'name=value&abc=xyz&abc=123'
```
Nilai `querystring.parse()` yang dikembalikan adalah:  

```
{
name: 'value',
abc: ['xyz', '123']
}
```
`querystring.decode()` adalah alias untuk `querystring.parse()`.

`querystring.stringify(object[, separator[, equal[, options]]])`  
Menyerialisasi `object` dan mengembalikan string kueri.  
Parameter `separator` adalah substring untuk membatasi pasangan kunci dan nilai dalam string kueri. Secara default, itu adalah `&`.  
Parameter `equal` adalah substring untuk membatasi kunci dan nilai dalam string kueri. Secara default, itu adalah `=`.  
Parameter `options` adalah objek dengan kunci berikut:    
`encodeURIComponent function`  
Fungsi yang digunakan untuk mengonversi karakter URL yang tidak aman untuk pengkodean persentase dalam string kueri. Secara default, itu adalah `querystring.escape()`.
Secara default, karakter yang memerlukan pengkodean persentase dalam string kueri dikodekan sebagai UTF-8. Untuk menggunakan pengkodean yang berbeda, tentukan opsi `encodeURIComponent`.  
Misalnya, gunakan kode berikut:  

```
querystring.stringify({ name: 'value', abc: ['xyz', '123'], anotherName: '' });
```
Nilai yang dikembalikan adalah:  

```
'name=value&abc=xyz&abc=123&anotherName='
```
`querystring.encode()` adalah alias untuk `querystring.stringify()`.

`querystring.unescape(string)`  
Mendekode karakter yang dikodekan persentase URL dalam `string` yang tersedia, mengembalikan string kueri yang tidak lolos. Metode ini digunakan oleh `querystring.parse()` dan tidak boleh digunakan secara langsung.

## Fitur yang dibatasi
<a name="writing-functions-javascript-features-restricted-features"></a>

Fitur JavaScript bahasa berikut tidak didukung atau dibatasi karena masalah keamanan.

**Evaluasi kode dinamis**  
Evaluasi kode dinamis tidak didukung. Konstruktor `eval()` dan `Function` mengalami kesalahan jika dicoba. Misalnya, `const sum = new Function('a', 'b', 'return a + b')` mengalami kesalahan.

**Timer**  
Fungsi `setTimeout()`, `setImmediate()`, dan `clearTimeout()` tidak didukung. Tidak ada ketentuan untuk menunda atau menghasilkan dalam fungsi jalankan. Fungsi Anda harus dijalankan secara serentak sampai selesai.

**Tanggal dan stempel waktu**  
Untuk alasan keamanan, tidak ada akses ke timer beresolusi tinggi. Semua metode `Date` untuk meminta waktu saat ini selalu mengembalikan nilai yang sama saat menjalankan fungsi tunggal. Stempel waktu yang dikembalikan adalah waktu fungsi mulai berjalan. Akibatnya, Anda tidak dapat mengukur waktu berlalu dalam fungsi Anda.

**Akses sistem file**  
Tidak ada akses sistem file. Misalnya, tidak ada modul `fs` untuk akses sistem file seperti yang ada di Node.js.

**Akses proses**  
Tidak ada akses proses. Misalnya, tidak ada objek `process` global untuk memproses akses informasi seperti yang ada di Node.js.

**Variabel-variabel lingkungan**  
Tidak ada akses ke variabel lingkungan.   
Sebagai gantinya, Anda dapat menggunakan CloudFront KeyValueStore untuk membuat datastore terpusat dari pasangan kunci-nilai untuk Fungsi Anda. CloudFront CloudFront KeyValueStore memungkinkan pembaruan dinamis ke data konfigurasi Anda tanpa perlu menerapkan perubahan kode. Anda harus menggunakan [JavaScript runtime 2.0](functions-javascript-runtime-20.md) untuk menggunakannya CloudFront KeyValueStore. Untuk informasi selengkapnya, lihat [Amazon CloudFront KeyValueStore](kvs-with-functions.md).

**Akses jaringan**  
Tidak ada dukungan untuk panggilan jaringan. Misalnya, XHR, HTTP (S), dan soket tidak didukung.