javascript - JavaScript 对象如何为 false 且不为 null?

标签 javascript servicenow rhino

在 ServiceNow 脚本中,我尝试检测是否定义了某些内容。

关于this page它说

All values are truthy unless they are defined as falsy. That is, all values are truthy except false, 0, -0, 0n, "", null, undefined, and NaN.

因此,任何 JavaScript 对象都必须为 true,除非它为 null。

但请考虑此 ServiceNow 代码,它打印有关由记录生成器创建的事件的一些信息,该记录生成器具有名为 location 的变量。

var incGR = new GlideRecord('incident');
incGR.get('49eab040975d6510378377500153afe8');
gs.info(typeof incGR.variables);
gs.info(incGR.variables ? true : false);
gs.info(incGR.variables.location);
gs.info(incGR.variables.constructor.name);

当作为后台脚本运行时,它会打印以下内容:

*** Script: object
*** Script: false
*** Script: 8269b993db7d3200860930cf9d961945
*** Script: GlideElementVariables

现在我明白了 incGRincGR.variables 实际上是 Java 对象(在旧版本的 Rhino 引擎中创建)。不过,如果 incGR.variables 是一个非空对象,它怎么会是 false?

最佳答案

值得指出的几件事:

我们将JS中的 bool 值分为“真”和“假”

Truthy 意味着它将导致使用 if?; falsy 意味着它将转到 else:

因此,在您的声明中:

Thus, any JavaScript object must be true unless it is null.

我想你的意思是:

Thus, any JavaScript object must be truthy unless it is falsy.

但我们明白您的意思,别担心!

这就是你面临的难题

如何incGR.variables? true : falsefalse 但是还有 incGR.variables.locationincGR.variables.constructor 的值.name

这对我来说确实也是一个谜。我同意你的观点,incGR.variables.location 可以有值(在本例中为字符串)的唯一方法是让 incGR.variables 成为一个对象,因此要诚实。

可能的解决方案

您是否检查过它是否不是标准的 Javascript 对象?是否可能存在一个“getter”专门以 incGR.variables 的“falsy”值进行响应,但确实为 incGR.variables.location 提供正确的值?

您可以通过添加此行来进一步帮助调试:

gs.info(JSON.stringify(incGR.variables,null,2));

并报告结果。

您可以“清洗”它以使其正常运行

执行以下操作会将其转换为正确的 Javascript 对象。

var incGR = new GlideRecord('incident');
incGR.get('49eab040975d6510378377500153afe8');

const incGR_js = JSON.parse(JSON.stringify(incGR));

gs.info(typeof incGR_js.variables);
gs.info(incGR_js.variables ? true : false);
gs.info(incGR_js.variables.location);
gs.info(incGR_js.variables.constructor.name);

关于javascript - JavaScript 对象如何为 false 且不为 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75902981/

相关文章:

javascript - 函数中的返回数组给出了未定义的javascript

javascript - 如何注册关闭按钮元素的 onClick 事件

java - 从 Java/Scala 实例化 Rhinoscript native 对象

java - 如何使用 Rhino 执行 JavaScript 库并在 JavaScript 库上调用 API 获取 HTML

javascript - Window.open() 打开与我的网站 url 相连的 url

javascript - 使用jquery创建id失败

javascript - MD5哈希值不同

javascript - 返回字符串中的子字符串值

javascript - ServiceNow - 查询表和插入事件

javascript - Rhino JSON.stringify 未定义