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核心數據類型在瀏覽器和Node.js中一致,但處理方式和額外類型有所不同。 1)全局對像在瀏覽器中為window,在Node.js中為global。 2)Node.js獨有Buffer對象,用於處理二進制數據。 3)性能和時間處理在兩者間也有差異,需根據環境調整代碼。

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

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

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 Linux新版
SublimeText3 Linux最新版

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。