适用于 CloudFront Functions 的 JavaScript 运行时 1.0 功能
CloudFront Functions 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 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()方法来记录日志消息。注意
CloudFront Functions 不支持逗号语法,例如
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和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模块可以进行文件系统访问。 - 处理访问权限
-
没有处理访问权限。例如,没有像 Node.js 中那样用于处理信息访问权限的
process全局对象。 - 环境变量
-
无法访问环境变量。
相反,可以使用 CloudFront KeyValueStore 为 CloudFront Functions 创建集中式的键值对数据存储。借助 CloudFront KeyValueStore,无需部署代码更改即对配置数据进行动态更新。必须使用 JavaScript 运行时 2.0 才能使用 CloudFront KeyValueStore。有关更多信息,请参阅 Amazon CloudFront KeyValueStore。
- 网络访问
-
不支持网络调用。例如,不支持 XHR、HTTP (S) 和套接字。