在 Nashorn 中使用 JavaScript 中的 Java 对象

可以将 Java 对象传递给 Nashorn 引擎,以便在 Java 代码中进行处理。同时,有一些 JavaScript(和 Nashorn)特定的结构,并不总是清楚它们如何使用 java 对象。

下面是一个表,它描述了 JavaScript 构造中本机 Java 对象的行为。

经过测试的结构:

  1. if 子句中的表达式。在 JS 中,if 子句中的表达式不必像 Java 那样是布尔值。对于所谓的假值(null,undefined,0,空字符串等),它被评估为 false
  2. 对于每个语句,Nashorn 都有一种特殊的循环 - 每个循环 - 可以迭代不同的 JS 和 Java 对象。
  3. 获取对象大小。在 JS 中,对象具有属性长度,该属性长度返回数组或字符串的大小。

结果:

类型 If for each length
Java null false 没有迭代 例外
Java empty string false 没有迭代 0
Java string true 迭代字符串字符 字符串的长度
Java Integer/Long 值 != 0 没有迭代 未定义
Java ArrayList true 迭代元素 列表的长度
Java HashMap true 迭代值 空值
Java HashSet true 迭代物品 未定义

Recommendatons:

  • 建议使用 if (some_string) 检查字符串是否为空且不为空
  • for each 可以安全地用于迭代任何集合,如果集合不可迭代,null 或未定义,它不会引发异常
  • 在获取对象的长度之前,必须检查 null 或 undefined(对于任何调用方法或获取 Java 对象属性的尝试都是如此)