为何ServiceNow中GlideElementVariables对象非空却为假值?
为什么ServiceNow中GlideElementVariables对象非空却被判定为假值?
这是因为ServiceNow基于Rhino引擎运行脚本,而Rhino对Java对象的布尔值转换逻辑和原生JavaScript存在差异:
- 原生JS中,所有非
null/undefined的对象都属于真值,但Rhino在处理Java对象时,会调用对象自身的booleanValue()方法(遵循Java的布尔转换规则)来生成布尔值,而非沿用JS的判断逻辑。 - 你遇到的
GlideElementVariables类,其内部的booleanValue()方法默认返回false,所以在JS的三元表达式incGR.variables ? true : false中会得到false,哪怕对象本身非空、能正常访问属性。
结合你的输出可以验证这个逻辑:
typeof incGR.variables返回object:因为Rhino将Java对象映射为JS的object类型;- 能获取
incGR.variables.location的值:说明对象确实存在且具备对应的属性/方法; incGR.variables.constructor.name返回GlideElementVariables:确认这是ServiceNow封装的Java类。
正确的对象有效性检测方式
不要依赖布尔转换判断这类Java封装对象是否有效,改用以下方式:
- 检查对象是否为
null/undefined:if (incGR.variables != null) - 检查特定属性是否存在:
if (typeof incGR.variables.location !== 'undefined') - 直接调用Java布尔方法验证:
gs.info(incGR.variables.booleanValue())(会返回false,印证上述逻辑)
内容的提问来源于stack exchange,提问作者giles3
相关产品推荐
相关产品推荐

