本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
JavaScript 函數的執行階段 1.0 CloudFront 功能
CloudFront 功能 JavaScript 運行時環境與 ECMAScript(ES)5.1 版
下列主題列出所有支援的語言功能。
核心功能
支援 ES 的以下核心功能。
- 類型
-
支援所有 ES 5.1 類型。這包括布林值、數字、字串、物件、陣列、函數、函數建構子和常規表達式。
- 運算子
-
支援所有 ES 5.1 運算子。
支援 ES 7 指數運算子 (
**
)。 - 聲明
-
注意
不支援
const
和let
陳述式。支援下列 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)
從八位元陣列或編碼字串建立一個位元組字串。字串編碼選項為
hex
、base64
和base64url
。 -
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
始終返回相同的值 (函數的開始時間)。如需詳細資訊,請參閱 限制功能。 - 函數
-
支援
apply
、bind
和call
方法。不支援函數建構子。
- 常規表達式
-
支援所有 ES 5.1 常規表達式功能。常規表達式語言與 Perl 相容。支援 ES 9 命名的擷取群組。
- JSON
-
支援所有 ES 5.1 JSON 功能,包括
parse
和stringify
. - 陣列
-
支援陣列上的以下 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)
-
建立並傳回雜湊物件,藉助此物件,您可以使用給定的演算法產生雜湊摘要:
md5
、sha1
或sha256
。 hash.update(data)
-
使用給定的
data
更新雜湊內容。 hash.digest([encoding])
-
計算使用
hash.update()
傳遞的所有資料的摘要。編碼可以是hex
、base64
或base64url
。
HMAC方法
crypto.createHmac(algorithm, secret key)
-
建立並傳回使用指定
algorithm
與的HMAC物件secret key
。演算法可以是md5
、sha1
或sha256
。 hmac.update(data)
-
更新與給定的HMAC內容
data
。 hmac.digest([encoding])
-
計算使用
hmac.update()
傳遞的所有資料的摘要。編碼可以是hex
、base64
或base64url
。
查詢字串
注意
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) 和通訊端。