程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java Nashorn--Part 6

Java Nashorn--Part 6

編輯:關於JAVA

Java Nashorn--Part 6。本站提示廣大學習愛好者:(Java Nashorn--Part 6)文章只能為提供參考,不一定能成為您想要的結果。以下是Java Nashorn--Part 6正文


Nashorn 的 JavaScript 言語的擴展

正如我們所討論的,Nashorn 是一個完全契合 ECMAScript 5.1 的完成。但是除此之外,Nashorn 還完成了很多 JavaScript 言語的語法擴展,開發人員運用起來愈加方便和容易。這些擴展被 JavaScript 開發者所熟習,並且相當多的人反復擴展的 JavaScript 的 Mozilla 的方言版本,讓我們來看看幾個最罕見的有用的擴展。

Foreach 循環

規范的 JavaScript 並沒有同等於 Java 言語中的 foreach 循環,但是
Nashorn 完成了 Mozilla 方言版本的 foreach 循環體:

var jsEngs = [ "Nashorn", "Rhino", "V8", "IonMonkey", "Nitro" ];
for each (js in jsEngs) {
    print(js);
}
單一功用的表達式

Nashorn 還支持另一個小的語法強化,假如一個函數(命名的或匿名的)只包括一個表達式,那麼括號和前往語句可以省略。在上面的例子中,cube() 和cube2() 是完全等效的,但 cube() 通常是不合法的
JavaScript 語法:

function cube(x) x*x*x;
function cube2(x) {
    return x*x*x;
}
print(cube(3));
print(cube2(3));
支持多個 catch 子句

JavaScript 只支持復雜的 try、catch 和 throw 的異常處置。

留意:
在 JavaScrip t中,一切的異常都是 unchecked 類型的異常。

規范的 JavaScrip t只允許一個 catch 子句,不支持處置不同類型異常的 catch 子句。僥幸的是,曾經有一個現有的 Mozilla 的語法擴展提供這個功用,Nashorn 具有很好的支持,如下所示:

function fnThatMightThrow() {
    if (Math.random() < 0.5) {
        throw new TypeError();
    } else {
        throw new Error();
    }
}

try {
    fnThatMightThrow();
} catch (e if e instanceof TypeError) {
    print("Caught TypeError");
} catch (e) {
    print("Caught some other error");
}
詳細完成細節

我們以前討論過,Nashorn 直接編譯 JavaScript 順序生成 JVM 字節碼,然後好像其他類一樣運轉它們。例如,lambda 表達式可以作為
JavaScript 函數復雜明了的表現,以及它們之間的復雜的操作性。
讓我們看下以前的例子,來看一下是如何用函數作為 Java 接口的匿名完成的。

jjs> var clz = Java.type("java.util.concurrent.Callable");
jjs> var obj = new clz(function () { print("Foo"); } );
jjs> print(obj);
jdk.nashorn.javaadapters.java.util.concurrent.Callable@290dbf45

這意味著完成 Callable 接口的詳細完成的 JavaScript 對象的類型為jdk.nashorn.javaadapters.java.util.concurrent.Callable,這個類並不是 Nashorn 附帶的,反而,Nashorn 完成不論什麼樣的接口,靜態轉換成字節碼,只需求維護原始的名字作為包構造的一局部,看起來愈加具有可讀性。

留意:
靜態代碼生成是 Nashorn 必備的局部,Nashorn 編譯一切一切的JavaScript 代碼生成 Java 字節碼,但歷來不會解釋代碼。

由於 Nashorn 是完全服從 ECMAScript 文檔標准,所以有些時分完成的才能就會有所受限,像上面的例子,思索打印出的對象是什麼:

jjs> var obj = {foo:"bar",cat:2};
jjs> print(obj);
[object Object]

ECMAScript 闡明要求輸入的後果為 [object Object],而不允許提供更多有用的細節(例如,obj 裡一切元素的屬性和值)。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved