JavaScript 函數的執行階段 1.0 CloudFront 功能 - Amazon CloudFront

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

JavaScript 函數的執行階段 1.0 CloudFront 功能

CloudFront 功能 JavaScript 運行時環境與 ECMAScript(ES)5.1 版兼容,並且還支持 ES 版本 6 到 9 的某些功能。它還提供了一些不屬於 ES 規格的非標準方法。

下列主題列出所有支援的語言功能。

核心功能

支援 ES 的以下核心功能。

類型

支援所有 ES 5.1 類型。這包括布林值、數字、字串、物件、陣列、函數、函數建構子和常規表達式。

運算子

支援所有 ES 5.1 運算子。

支援 ES 7 指數運算子 (**)。

聲明
注意

不支援 constlet 陳述式。

支援下列 ES 5.1 陳述式:

  • break

  • catch

  • continue

  • do-while

  • else

  • finally

  • for

  • for-in

  • if

  • return

  • switch

  • throw

  • try

  • var

  • while

  • 標記的陳述式

文字

支援 ES 6 範本文字:多行字串、表達式插補和巢狀範本。

函數

支援所有 ES 5.1 函數功能。

支援 ES 6 箭頭函數,支援 ES 6 剩餘參數語法。

Unicode

來源文字和字串常值可以包含 Unicode 編碼的字元。也支援由六個字元 (例如 \uXXXX) 組成的 Unicode 字碼指標逸出序列。

嚴格模式

函數按預設會在嚴格模式下運作,因此您不需要在函數程式碼中新增 use strict 陳述式。無法對此進行變更。

基本物件

支援 ES 的以下基本物件。

物件

支援物件上的以下 ES 5.1 方法:

  • create( 不含屬性清單)

  • defineProperties

  • defineProperty

  • freeze

  • getOwnPropertyDescriptor

  • getOwnPropertyNames

  • getPrototypeOf

  • hasOwnProperty

  • isExtensible

  • isFrozen

  • prototype.isPrototypeOf

  • isSealed

  • keys

  • preventExtensions

  • prototype.propertyIsEnumerable

  • seal

  • prototype.toString

  • prototype.valueOf

支援物件上的以下 ES 6 方法:

  • assign

  • is

  • prototype.setPrototypeOf

支援物件上的以下 ES 8 方法:

  • entries

  • values

字串

支援以下針對字串的 ES 5.1 方法:

  • 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

支援字串上的以下 ES 6 方法:

  • fromCodePoint

  • prototype.codePointAt

  • prototype.endsWith

  • prototype.includes

  • prototype.repeat

  • prototype.startsWith

支援字串上的以下 ES 8 方法:

  • prototype.padStart

  • prototype.padEnd

支援字串上的以下 ES 9 方法:

  • prototype.trimStart

  • prototype.trimEnd

支援字串上的以下非標準方法:

  • prototype.bytesFrom(array | string, encoding)

    從八位元陣列或編碼字串建立一個位元組字串。字串編碼選項為 hexbase64base64url

  • prototype.fromBytes(start[, end])

    從位元組字串建立 Unicode 字串,其中每個位元組都會以對應的 Unicode 字碼指標取代。

  • prototype.fromUTF8(start[, end])

    從 UTF -8 個編碼的字節字符串創建一個 Unicode 字符串。如果編碼不正確,則返回 null

  • prototype.toBytes(start[, end])

    從 Unicode 字串建立一個位元組字串。所有字元均必須在 [0,255] 範圍內。如果不在此範圍內,則返回 null

  • prototype.toUTF8(start[, end])

    從一個 Unicode 字符串創建一個 UTF -8 編碼的字節字符串。

Number

支援數字上的所有 ES 5.1 方法。

支援數字上的以下 ES 6 方法:

  • 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

內建物件

支援 ES 的以下內建物件。

數學

支援所有 ES 5.1 數學方法。

注意

在 CloudFront Functions 執行階段環境中,Math.random()導入會使用BSDarc4random內建的「開啟」與函數執行時的時間戳記。

支援以下 ES 6 數學方法:

  • 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

日期

支援所有 ES 5.1 Date 功能。

注意

基於安全考量,在單一函數執行的生命週期內,Date 始終返回相同的值 (函數的開始時間)。如需詳細資訊,請參閱 限制功能

函數

支援 applybindcall 方法。

不支援函數建構子。

常規表達式

支援所有 ES 5.1 常規表達式功能。常規表達式語言與 Perl 相容。支援 ES 9 命名的擷取群組。

JSON

支援所有 ES 5.1 JSON 功能,包括parsestringify.

陣列

支援陣列上的以下 ES 5.1 方法:

  • 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

支援陣列上的以下 ES 6 方法:

  • of

  • prototype.copyWithin

  • prototype.fill

  • prototype.find

  • prototype.findIndex

支援陣列上的以下 ES 7 方法:

  • prototype.includes

類型陣列

支援以下 ES 6 類型陣列:

  • Int8Array

  • Uint8Array

  • Uint8ClampedArray

  • Int16Array

  • Uint16Array

  • Int32Array

  • Uint32Array

  • Float32Array

  • Float64Array

  • prototype.copyWithin

  • prototype.fill

  • prototype.join

  • prototype.set

  • prototype.slice

  • prototype.subarray

  • prototype.toString

ArrayBuffer

支援 ArrayBuffer 上的以下方法:

  • prototype.isView

  • prototype.slice

Promise

支援 Promise 上的以下方法:

  • reject

  • resolve

  • prototype.catch

  • prototype.finally

  • prototype.then

加密

加密模塊提供標準的散列和基於哈希的消息身份驗證代碼()HMAC助手。您可以使用 require('crypto') 加載模組。此模組會公開下列方法,其行為與 Node.js 對應方法完全相同:

  • createHash(algorithm)

  • hash.update(data)

  • hash.digest([encoding])

  • createHmac(algorithm, secret key)

  • hmac.update(data)

  • hmac.digest([encoding])

如需詳細資訊,請參閱內建模組一節中的 加密(哈希和HMAC)

主控台

這是一個用於偵錯的協助程式物件。它僅支援 log() 方法以記錄日誌訊息。

注意

CloudFront 函數不支援逗號語法,例如console.log('a', 'b'). 而是使用格console.log('a' + ' ' + 'b')式。

錯誤類型

支援以下錯誤物件:

  • Error

  • EvalError

  • InternalError

  • MemoryError

  • RangeError

  • ReferenceError

  • SyntaxError

  • TypeError

  • URIError

全域變數

支援 globalThis 物件。

支援以下 ES 5.1 全局函數:

  • decodeURI

  • decodeURIComponent

  • encodeURI

  • encodeURIComponent

  • isFinite

  • isNaN

  • parseFloat

  • parseInt

支援以下全局常數:

  • NaN

  • Infinity

  • undefined

內建模組

支援以下內建模組:

加密(哈希和HMAC)

加密模塊(crypto)提供標準的散列和基於哈希的消息身份驗證代碼(HMAC)助手。您可以使用 require('crypto') 加載模組。此模組提供下列方法,其行為與 Node.js 對應方法完全相同:

雜湊方法

crypto.createHash(algorithm)

建立並傳回雜湊物件,藉助此物件,您可以使用給定的演算法產生雜湊摘要:md5sha1sha256

hash.update(data)

使用給定的 data 更新雜湊內容。

hash.digest([encoding])

計算使用 hash.update() 傳遞的所有資料的摘要。編碼可以是 hexbase64base64url

HMAC方法

crypto.createHmac(algorithm, secret key)

建立並傳回使用指定algorithm與的HMAC物件secret key。演算法可以是 md5sha1sha256

hmac.update(data)

更新與給定的HMAC內容data

hmac.digest([encoding])

計算使用 hmac.update() 傳遞的所有資料的摘要。編碼可以是 hexbase64base64url

查詢字串

注意

CloudFront Functions 事件物件會自動為您解析URL查詢字串。這意味著在大多數情況下,您不需要使用此模組。

查詢字串模組 (querystring) 提供剖析和格式化URL查詢字串的方法。您可以使用 require('querystring') 加載模組。此模組提供下列方法。

querystring.escape(string)

URL-編碼給定的string,返回一個轉義的查詢字符串。該方法由 querystring.stringify() 使用,並且不應直接使用。

querystring.parse(string[, separator[, equal[, options]]])

剖析查詢字串 (string) 並傳回物件。

separator 參數是用來分隔查詢字串中的鍵/值對的子字串。其在預設情況下為 &

equal 參數是用來分隔查詢字串中的鍵和值的子字串。其在預設情況下為 =

options 參數是具有下列鍵的物件:

decodeURIComponent function

解碼查詢字串中百分比編碼字元的函數。其在預設情況下為 querystring.unescape()

maxKeys number

要剖析的鍵的最大數量。其在預設情況下為 1000。使用 0 的值移除計數鍵的限制。

根據預設,會假設查詢字串中的百分比編碼字元使用 -8 編碼。UTF無效的 UTF -8 個序列被替U+FFFD換為替換字符。

例如,對於下列查詢字串:

'name=value&abc=xyz&abc=123'

querystring.parse() 的返回值是:

{ name: 'value', abc: ['xyz', '123'] }

querystring.decode() 是 的別名。querystring.parse()

querystring.stringify(object[, separator[, equal[, options]]])

序列化 object 並傳回查詢字串。

separator 參數是用來分隔查詢字串中的鍵/值對的子字串。其在預設情況下為 &

equal 參數是用來分隔查詢字串中的鍵和值的子字串。其在預設情況下為 =

options 參數是具有下列鍵的物件:

encodeURIComponent function

用於在查詢字串中將URL不安全字元轉換為百分比編碼的函數。其在預設情況下為 querystring.escape()

根據預設,在查詢字串中需要百分比編碼的字元會編碼為 -8。UTF若要使用不同的編碼,請指定 encodeURIComponent 選項。

例如,對於以下程式碼:

querystring.stringify({ name: 'value', abc: ['xyz', '123'], anotherName: '' });

返回值是:

'name=value&abc=xyz&abc=123&anotherName='

querystring.encode()querystring.stringify() 的別名。

querystring.unescape(string)

解碼給定的URL百分比編碼字符string,返回一個未轉義的查詢字符串。此方法由 querystring.parse() 使用,並且不應直接使用。

限制功能

基於安全考量,下列 JavaScript 語言功能不受支援或受限制。

動態程式碼評估

不支援動態程式碼評估。如果嘗試此評估,eval()Function 建構子都會丟出錯誤。例如,const sum = new Function('a', 'b', 'return a + b') 丟出錯誤。

計時器

不支援 setTimeout()setImmediate()clearTimeout() 函數。在函數執行期間未推遲或產生任何佈建。您的函數必須同步執行方可完成。

日期和時間戳記

基於安全考量,無法存取高解析度計時器。查詢當前時間的所有 Date 方法始終在單個函數執行的生命週期內返回相同的值。返回的時間戳記是函數開始執行的時間。因此,您無法測量函數中的經過時間。

檔案系統存取

沒有檔案系統存取權。例如,沒有類似 Node.js 中的檔案系統存取 fs 模組。

程序存取

沒有進程訪問權限。例如,沒有像 Node.js 中那樣處理信息訪問的process全局對象。

環境變數

無法存取環境變數。

相反地,您可以使用 CloudFront KeyValueStore 為 CloudFront Functions 建立索引鍵值對的集中式資料存放區。 CloudFront KeyValueStore 啟用動態更新您的組態資料,而不需要部署程式碼變更。您必須使用JavaScript 執行階段 2.0 才能使用 CloudFront KeyValueStore。如需詳細資訊,請參閱Amazon CloudFront KeyValueStore

網路存取

不支援網路呼叫。例如XHR,不支援、HTTP (S) 和通訊端。