Falsy and Truthy and empty arrays in ServiceNow Javascript
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
4 weeks ago - last edited 3 weeks ago
As we know, GlideElements and other types of Glide objects can be interpreted as false (falsy) depending on their underlying value, e.g.
if (incident_gr.active) { ... }
Even though the Javascript standard says the only things that are falsy are: false, 0, -0, 0n, "", null, undefined, NaN, and document.all. Until recently, I had assumed this was because Glide objects are not really JavaScript objects - but something else - Java objects etc. However, the other day I was reviewing some code that I only wanted to run if a pure Javascript array object had at least one element:
var someArray = [];
callSomeFunctionThatMightAddElementsTo(someArray);
if (someArray) {
doSomething();
}
Despite appearing wrong, from a pure JavaScript perspective (as an array is always Truthy according to the Javascript Specification), it worked perfectly! It should have been...
if (someArray && someArray.length ) {
doSomething();
}
Why didn't I need to change it? It appears that, in Server-Side JS, the empty array [] is also treated as false (contrary to the Standard).
For example, the following code outputs 'truthy' in the Browser dev console (client side), but 'falsy' in a background script.
console.log( [] ? 'truthy' : 'falsy' );
Just something to be aware of I guess! Especially if switching between client-side and server-side scripting. I've put up some notes here: Truthy/Falsy behaviour in ServiceNow Javascript.