es5-compliance
SKILL.md
ES5 Compliance for ServiceNow
ServiceNow runs on Mozilla Rhino engine which only supports ES5 JavaScript (2009 standard). All server-side scripts MUST use ES5 syntax.
Forbidden Syntax (WILL CAUSE SyntaxError)
| ES6+ Syntax | ES5 Alternative |
|---|---|
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 |
Use Array.prototype.slice.call() |
class MyClass {} |
Use constructor functions |
async/await |
Use GlideRecord callbacks |
Promise |
Use GlideRecord with callbacks |
Common Patterns
Variable Declarations
// WRONG - ES6
const MAX_RETRIES = 3
let currentUser = gs.getUser()
// CORRECT - ES5
var MAX_RETRIES = 3
var currentUser = gs.getUser()
Functions
// 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"
}
String Concatenation
// WRONG - Template literals
var message = `Incident ${number} assigned to ${user}`
// CORRECT - String concatenation
var message = "Incident " + number + " assigned to " + user
Loops
// 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])
}
Default Parameters
// WRONG - Default parameters
function process(incident, priority = 3) {
// ...
}
// CORRECT - Manual defaults
function process(incident, priority) {
if (typeof priority === "undefined") {
priority = 3
}
// ...
}
Automatic Validation
Before deploying any server-side script:
- Check for
const/letdeclarations - convert tovar - Check for arrow functions
=>- convert tofunction() - Check for template literals
`- convert to string concatenation - Check for destructuring
{a, b}- convert to explicit property access - Check for
for...ofloops - convert to index-based loops
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.
Weekly Installs
50
Repository
groeimetai/snow-flowGitHub Stars
53
First Seen
Jan 22, 2026
Security Audits
Installed on
claude-code45
gemini-cli44
opencode44
codex44
cursor43
github-copilot43