关于 es5-compliance
面向 ServiceNow 服务端脚本开发者的 ES5 合规技能,说明 Rhino 支持的语法范围,并提供现代 JavaScript 写法的 ES5 替代方案。
主要功能
- 01列出不兼容的 ES6+ 语法
- 02提供 ES5 替代写法
- 03说明部署前的语法检查项
- 04区分服务端与客户端脚本要求
适用场景
- 01编写 ServiceNow 服务端脚本
- 02部署前检查脚本语法
- 03将现代 JavaScript 改写为 ES5
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ serac-labs/ serac --skill es5-compliance安装后在 Claude Code 中输入/es5-compliance确认已加载。
详细介绍
ServiceNow 的 ES5 合规性
ServiceNow 运行在 Mozilla Rhino 引擎上,该引擎仅支持 ES5 JavaScript(2009 年标准)。所有服务器端脚本都必须使用 ES5 语法。
禁止使用的语法(会导致 SyntaxError)
| ES6+ 语法 | ES5 替代写法 |
|---|---|
const x = 5 | var x = 5 |
let items = [] | var items = [] |
() => {} | function() {} |
`Hello ${name}` | 'Hello ' + name |
for (x of arr) | for (var i = 0; i < arr.length; i++) |
{a, b} = obj | var a = obj.a; var b = obj.b; |
[a, b] = arr | var a = arr[0]; var b = arr[1]; |
...spread | 使用 Array.prototype.slice.call() |
class MyClass {} | 使用构造函数 |
async/await | 使用 GlideRecord 回调 |
Promise | 使用带回调的 GlideRecord |
常见模式
变量声明
// WRONG - ES6
const MAX_RETRIES = 3
let currentUser = gs.getUser()
// CORRECT - ES5
var MAX_RETRIES = 3
var currentUser = gs.getUser()
函数
// WRONG - Arrow functions
var active = incidents.filter((inc) => inc.active)
var process = () => {
return "done"
}
// CORRECT - ES5 functions
var active = []
for (var i = 0; i < incidents.length; i++) {
if (incidents[i].active) {
active.push(incidents[i])
}
}
var process = function () {
return "done"
}
字符串拼接
// WRONG - Template literals
var message = `Incident ${number} assigned to ${user}`
// CORRECT - String concatenation
var message = "Incident " + number + " assigned to " + user
循环
// WRONG - for...of
for (var item of items) {
gs.info(item)
}
// CORRECT - Traditional for loop
for (var i = 0; i < items.length; i++) {
gs.info(items[i])
}
默认参数
// WRONG - Default parameters
function process(incident, priority = 3) {
// ...
}
// CORRECT - Manual defaults
function process(incident, priority) {
if (typeof priority === "undefined") {
priority = 3
}
// ...
}
自动验证
部署任何服务器端脚本之前:
- 检查
const/let声明,并将其改为var - 检查箭头函数
=>,并将其改为function() - 检查模板字符串
`,并将其改为字符串拼接 - 检查解构赋值
{a, b},并将其改为显式属性访问 - 检查
for...of循环,并将其改为基于索引的循环
例外:客户端脚本
客户端脚本(Client Scripts、UI Policies)在浏览器中运行,根据用户使用的浏览器,可能支持 ES6+。不过,为了获得最大兼容性,仍建议使用 ES5。
评论
支持 Markdown