在 Nashorn 中使用 JavaScript 中的 Java 对象
可以将 Java 对象传递给 Nashorn 引擎,以便在 Java 代码中进行处理。同时,有一些 JavaScript(和 Nashorn)特定的结构,并不总是清楚它们如何使用 java 对象。
下面是一个表,它描述了 JavaScript 构造中本机 Java 对象的行为。
经过测试的结构:
- if 子句中的表达式。在 JS 中,if 子句中的表达式不必像 Java 那样是布尔值。对于所谓的假值(null,undefined,0,空字符串等),它被评估为 false
- 对于每个语句,Nashorn 都有一种特殊的循环 - 每个循环 - 可以迭代不同的 JS 和 Java 对象。
- 获取对象大小。在 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 对象属性的尝试都是如此)