CloudFront Functions 的 JavaScript 运行时功能
CloudFront Functions JavaScript 运行时环境符合 ECMAScript (ES) 版本 5.1
核心功能
支持 ES 的以下核心功能。
- 类型
-
支持所有 ES 5.1 类型。这包括布尔值、数字、字符串、对象、数组、函数、函数构造函数和正则表达式。
- 运算符
-
支持所有 ES 5.1 运算符。
支持 ES 7 幂运算符 (
**
)。 - Statement
-
注意 不支持
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 rest 参数语法。
- Unicode
-
源文本和字符串文本可以包含 Unicode 编码的字符。还支持由六个字符组成的 Unicode 代码点转义序列(例如,
\uXXXX
)。 - 严格模式
-
默认情况下,函数在严格模式下运行,因此您无需在函数代码中添加
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 编码的字节字符串。
-
- 数字
-
支持对数字使用所有 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()
实现使用植入有函数运行时间戳的 OpenBSDarc4random
。支持以下 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
-
支持以下承诺方法:
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()
方法来记录日志消息。
错误类型
支持以下错误对象:
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
和secret key
的 HMAC 对象。算法可以是md5
、sha1
或sha256
。 hmac.update(data)
-
用给定的
data
更新 HMAC 内容。 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
的值取消键的计数限制。
默认情况下,假定查询字符串中的百分比编码字符使用 UTF-8 编码。无效的 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()
。
默认情况下,查询字符串中需要百分比编码的字符将编码为 UTF-8。要使用其他编码,请指定
encodeURIComponent
选项。例如,在下面的代码中:
querystring.stringify({ name: 'value', abc: ['xyz', '123'], anotherName: '' });
返回值为:
'name=value&abc=xyz&abc=123&anotherName='
querystring.encode()
是 的别名。querystring.stringify()
querystring.unescape(string)
-
对给定的
string
中的 URL 百分比编码字符进行解码,以返回未转义的查询字符串。此方法由querystring.parse()
使用,不应直接使用。
受限功能
由于安全考虑,以下 JavaScript 语言功能或不受支持,或收到限制。
- 动态代码评估
-
不支持动态代码评估。如果尝试,
eval()
和Function
构造函数都会引发错误。例如,const sum = new Function('a', 'b', 'return a + b')
引发错误。 - 计时器
-
不支持
setTimeout()
、setImmediate()
和clearTimeout()
函数。在函数运行中没有可以推迟或生成的预置。您的函数必须同步运行才能完成。 - 日期和时间戳
-
出于安全原因,无法访问高分辨率计时器。在单个函数运行的生命周期内,查询当前时间的所有
Date
方法始终返回相同的值。返回的时间戳是函数开始运行的时间。因此,您无法度量函数中的经过时间。 - 文件系统访问
-
没有文件系统访问权限。例如,没有像 Node.js 的
fs
模块可以进行文件系统访问。 - 网络访问
-
不支持网络调用。例如,不支持 XHR、HTTP (S) 和套接字。