Oracle在Java編程語言中開發了一個名為Nashorn的新型JavaScript引擎,並隨Java 8一起發布。 Nashorn的目標是在Java中實現一個輕量級高性能的JavaScript運行時環境,並使用原生JVM。通過使用Nashorn,開發人員可以在Java應用程序中嵌入JavaScript,並從JavaScript代碼調用Java方法和類。
核心要點
- Nashorn是由Oracle使用Java開發的高性能JavaScript引擎,旨在在Java中實現輕量級的JavaScript運行時環境,並使用原生JVM。它允許開發人員在Java應用程序中嵌入JavaScript,並從JavaScript代碼調用Java方法和類。
- Nashorn的設計目標包括:基於ECMAScript-262第5.1版語言規範;支持javax.script(JSR 223)API;允許從JavaScript調用Java,反之亦然;定義一個命令行工具來評估JavaScript代碼;性能優於其前身Rhino。
- 使用Nashorn,JavaScript可以用作功能強大的shell式腳本語言,利用JavaScript的簡潔性和Java豐富的API。它可用於客戶端應用程序、服務器端應用程序、移動應用程序或小型物聯網(IoT)的設置。
為什麼放棄Rhino?
Rhino是Nashorn的前身。它始於1997年NetScape的一個項目,並於1998年發布。
Rhino發布至今已有16年,這個JavaScript引擎已經完成了它的使命。因此,Java團隊決定從頭開始開發一個新的JavaScript引擎,而不是重寫現有的引擎。這催生了Nashorn(有趣的是,nashorn在德語中是犀牛的意思)。
幾乎每個人都在瀏覽器中使用JavaScript,有些人也在服務器上使用它(例如Node.js),但Nashorn的開發目的不同。通過使用Nashorn,開發人員可以實現以下功能:
- 將JavaScript作為原生桌面代碼運行。
- 使用JavaScript進行shell腳本編寫。
- 從JavaScript代碼調用Java類和方法。
Nashorn的目標
在設計Nashorn時,開發人員為其設定了一系列目標:
- 它應該基於ECMAScript-262第5.1版語言規範,並且必須通過ECMAScript-262兼容性測試。
- 它應該支持javax.script(JSR 223)API。
- 它應該允許從JavaScript調用Java,反之亦然。
- 它應該定義一個命令行工具jjs,用於在“shebang”腳本(通常以#!/bin/sh開頭)、here文檔和編輯字符串中評估JavaScript代碼。
- 它的性能應該比Rhino顯著提高。
- 它不應該存在安全風險。
此外,沒有人決定Nashorn不包含調試功能,也不支持CSS和JavaScript庫/框架。這意味著Nashorn可以在瀏覽器中實現,而不會成為一個噩夢。
JavaScript簡述
為了使用Nashorn的jjs工具在shell中使用JavaScript,您應該首先安裝JDK8,您可以免費下載。要測試其安裝,請執行:
>_ javac -version # 它应该回显 # java version "1.8.x" jjs -version # 它应该回显 # nashorn 1.8.x jjs>
如果第一個或第二個命令出現任何問題,請嘗試將JDK添加到路徑中
現在您可以將JavaScript用作shell腳本。查看這個簡單的示例:
jjs> var a = 1 jjs> var b = 4 jjs> print (a+b) 5 jjs>
您可能已經發現,您不必將代碼寫入jjs shell。您可以將代碼寫入JavaScript源文件,然後從shell調用它。考慮以下JavaScript代碼:
var isPrime = function(num) { if (isNaN(num) || !isFinite(num) || num < 2) return false; var m = Math.sqrt(num); for (var i = 2; i <= m; i++) { if (num % i === 0) return false; } return true; } var numbers = [ 2, 3, 4, 5, 6, 7, 8, 9, 10 ]; for (var i = 0; i < numbers.length; i++) { if (isPrime(numbers[i])) print(numbers[i] + " is prime"); else print(numbers[i] + " is not prime"); }
假設代碼位於名為prime.js的文件中,我們可以通過執行以下命令在shell中運行它:
>_ jjs prime.js 2 is prime 3 is prime 4 is not prime 5 is prime 6 is not prime 7 is prime 8 is not prime 9 is not prime 10 is not prime
這可能會讓您想起Python代碼或bash腳本,但它是JavaScript。為了使其更像bash,Nashorn提供了arguments變量來提取命令行參數。考慮這個例子:
if (arguments.length === 0) print("No command-line arguments."); else { print("Called with these command-line arguments:"); for each (cli_arg in arguments) { print(cli_arg); } }
運行它將給出此輸出(參數位於--之後):
>_ jjs cliargs.js No command-line arguments. >_ jjs cliargs.js -- a b "c d e" Called with these command-line arguments: a b c d e
此外,JavaScript可以使用Java類和方法。請參閱此多線程JavaScript代碼示例:
var Thread = Java.type("java.lang.Thread"); var Runnable = Java.type('java.lang.Runnable'); var Run1 = Java.extend(Runnable, { run: function() { print("One thread"); print("One thread"); } }); new Thread(function() { print("Another thread"); print("Another thread"); print("Another thread"); }).start() new Thread(new Run1()).start();
輸出將是:
<code>Another thread Another thread One thread One thread Another thread</code>
您可以從輸出中看出代碼是多線程的。通過使用Java.type("java.lang.Thread");,我們可以在JavaScript代碼中調用Java類。 Nashorn甚至允許反向操作,在Java代碼中調用JavaScript代碼。
package j2js.example; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class Main { public static void main(String[] args) { ScriptEngine nashorn = new ScriptEngineManager().getEngineByName("nashorn"); try { nashorn.eval("print('Am I Java or JavaScript?')"); } catch (ScriptException e) { e.printStackTrace(); } } }
此示例僅在第14行打印Am I Java or JavaScript?問題,但這是將JavaScript代碼放入Java的最簡單示例。可以使用Java方法讀取JavaScript文件中的整個源代碼,然後將該代碼作為String參數傳遞給eval()方法。這將使JavaScript代碼在Java內部執行。
結論
如今,JavaScript無處不在!您可以將其用於客戶端應用程序、服務器端應用程序,甚至更好的是,有時同時用於客戶端和服務器。您可以將其用於移動應用程序或設置小型物聯網。現在,使用Nashorn,您可以將其用作功能強大的shell式腳本語言,利用JavaScript的簡潔性和Java豐富的API。
關於Nashorn JavaScript引擎的常見問題
什麼是Nashorn JavaScript引擎?
Nashorn JavaScript引擎是Oracle為Java虛擬機(JVM)開發的高性能JavaScript引擎。它旨在在JVM中本地執行JavaScript代碼,允許Java和JavaScript無縫交互。 Nashorn提供了比其前身Rhino顯著的性能改進,並包含對較新JavaScript功能的支持。
Nashorn與其他JavaScript引擎相比如何?
Nashorn的獨特之處在於它專門為JVM設計。這使其能夠利用JVM的健壯性、成熟性和性能特性。它還在Java和JavaScript之間提供了一個直接的橋樑,使兩種語言能夠無縫交互。但是,值得注意的是,Nashorn不像V8(用於Node.js和Chrome)或SpiderMonkey(用於Firefox)等其他JavaScript引擎那樣廣泛使用。
如何在我的Java應用程序中使用Nashorn?
要在Java應用程序中使用Nashorn,您需要使用ScriptEngineManager類創建一個Nashorn ScriptEngine的新實例。然後,您可以使用ScriptEngine的eval()方法執行JavaScript代碼。這是一個簡單的示例:
>_ javac -version # 它应该回显 # java version "1.8.x" jjs -version # 它应该回显 # nashorn 1.8.x jjs>
使用Nashorn的好處是什麼?
Nashorn提供了幾個好處。首先,它允許您在JVM中本地執行JavaScript代碼,這可以提高性能。其次,它在Java和JavaScript之間提供了一個無縫的橋樑,允許您在Java應用程序中使用JavaScript庫和框架。最後,Nashorn支持較新的JavaScript功能,這可以使您的JavaScript代碼更高效,更容易編寫。
Oracle是否仍在維護Nashorn?
從JDK 11開始,Oracle已棄用Nashorn。這意味著雖然它仍然包含在JDK中,但它不再被積極開發或維護。 Oracle建議開發人員開始尋找替代方案。
Nashorn的一些替代方案是什麼?
Nashorn有幾種替代方案,包括GraalVM,它是一個高性能的運行時,支持包括JavaScript在內的多種語言。其他替代方案包括Rhino,它是JVM的另一個JavaScript引擎,以及Node.js,它是一個基於Chrome的V8 JavaScript引擎的流行JavaScript運行時。
我可以在Nashorn中使用ES6功能嗎?
Nashorn支持一些ES6功能,但並非所有功能。這包括let和const聲明、箭頭函數和模板字符串等功能。但是,不支持模塊、類和Promise等功能。
如何調試Nashorn執行的JavaScript代碼?
Nashorn包含一個名為jjs的命令行工具,可用於執行和調試JavaScript代碼。您還可以使用Java調試器(jdb)來調試Nashorn執行的JavaScript代碼。
我可以在Nashorn中使用Node.js模塊嗎?
雖然Nashorn本身不支持Node.js模塊,但有一些庫可以提供此功能。這樣一個庫是Avatar.js,它在Nashorn之上提供了一個與Node.js兼容的API和模塊系統。
如何從Nashorn執行的JavaScript代碼調用Java方法?
Nashorn在Java和JavaScript之間提供了一個無縫的橋樑,允許您直接從JavaScript代碼調用Java方法。這是一個簡單的示例:
jjs> var a = 1 jjs> var b = 4 jjs> print (a+b) 5 jjs>
This revised response maintains the original image and its format, while paraphrasing the text to create a unique version of the article. The key information remains the same, but the wording and sentence structure have been altered.
以上是介紹Nashorn JavaScript引擎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver Mac版
視覺化網頁開發工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。