es5-compliance
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseES5 Compliance for ServiceNow
ServiceNow的ES5合规性
ServiceNow runs on Mozilla Rhino engine which only supports ES5 JavaScript (2009 standard). All server-side scripts MUST use ES5 syntax.
ServiceNow基于Mozilla Rhino引擎运行,该引擎仅支持ES5 JavaScript(2009标准)。所有服务器端脚本必须使用ES5语法。
Forbidden Syntax (WILL CAUSE SyntaxError)
禁止使用的语法(会导致SyntaxError)
| ES6+ Syntax | ES5 Alternative |
|---|---|
| |
| |
| |
| |
| |
| |
| |
| Use |
| Use constructor functions |
| Use GlideRecord callbacks |
| Use GlideRecord with callbacks |
| ES6+语法 | ES5替代方案 |
|---|---|
| |
| |
| |
| |
| |
| |
| |
| 使用 |
| 使用构造函数 |
| 使用GlideRecord回调 |
| 使用GlideRecord回调 |
Common Patterns
常见模式
Variable Declarations
变量声明
javascript
// WRONG - ES6
const MAX_RETRIES = 3;
let currentUser = gs.getUser();
// CORRECT - ES5
var MAX_RETRIES = 3;
var currentUser = gs.getUser();javascript
// 错误 - ES6
const MAX_RETRIES = 3;
let currentUser = gs.getUser();
// 正确 - ES5
var MAX_RETRIES = 3;
var currentUser = gs.getUser();Functions
函数
javascript
// 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'; };javascript
// 错误 - 箭头函数
var active = incidents.filter(inc => inc.active);
var process = () => { return 'done'; };
// 正确 - ES5函数
var active = [];
for (var i = 0; i < incidents.length; i++) {
if (incidents[i].active) {
active.push(incidents[i]);
}
}
var process = function() { return 'done'; };String Concatenation
字符串拼接
javascript
// WRONG - Template literals
var message = `Incident ${number} assigned to ${user}`;
// CORRECT - String concatenation
var message = 'Incident ' + number + ' assigned to ' + user;javascript
// 错误 - 模板字符串
var message = `Incident ${number} assigned to ${user}`;
// 正确 - 字符串拼接
var message = 'Incident ' + number + ' assigned to ' + user;Loops
循环
javascript
// 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]);
}javascript
// 错误 - for...of循环
for (var item of items) {
gs.info(item);
}
// 正确 - 传统for循环
for (var i = 0; i < items.length; i++) {
gs.info(items[i]);
}Default Parameters
默认参数
javascript
// WRONG - Default parameters
function process(incident, priority = 3) {
// ...
}
// CORRECT - Manual defaults
function process(incident, priority) {
if (typeof priority === 'undefined') {
priority = 3;
}
// ...
}javascript
// 错误 - 默认参数
function process(incident, priority = 3) {
// ...
}
// 正确 - 手动设置默认值
function process(incident, priority) {
if (typeof priority === 'undefined') {
priority = 3;
}
// ...
}Automatic Validation
自动验证
Before deploying any server-side script:
- Check for /
constdeclarations - convert toletvar - Check for arrow functions - convert to
=>function() - Check for template literals - convert to string concatenation
` - Check for destructuring - convert to explicit property access
{a, b} - Check for loops - convert to index-based loops
for...of
在部署任何服务器端脚本之前:
- 检查/
const声明 - 转换为letvar - 检查箭头函数- 转换为
=>function() - 检查模板字符串- 转换为字符串拼接
` - 检查解构- 转换为显式属性访问
{a, b} - 检查循环 - 转换为基于索引的循环
for...of
Exception: Client Scripts
例外情况:客户端脚本
Client-side scripts (Client Scripts, UI Policies) run in the browser and MAY support ES6+ depending on user's browser. However, for maximum compatibility, ES5 is still recommended.
客户端脚本(Client Scripts、UI Policies)在浏览器中运行,根据用户浏览器的不同,可能支持ES6+。不过,为了最大兼容性,仍然推荐使用ES5。