在 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 物件屬性的嘗試都是如此)