Jadual Kandungan
Apakah enjin JavaScript Nashorn?
Nashorn与其他JavaScript引擎相比如何?
Bagaimana menggunakan Nashorn dalam aplikasi Java saya?
Apakah faedah menggunakan Nashorn?
Adakah Oracle masih mengekalkan Nashorn?
Apakah beberapa alternatif kepada Nashorn?
Bolehkah saya menggunakan ciri -ciri ES6 di Nashorn?
Bagaimana untuk debug kod JavaScript yang dilaksanakan oleh Nashorn?
Bolehkah saya menggunakan modul Node.js di Nashorn?
Bagaimana untuk memanggil kaedah Java dari kod JavaScript yang dilaksanakan oleh Nashorn?
Rumah hujung hadapan web tutorial js Memperkenalkan Enjin JavaScript Nashorn

Memperkenalkan Enjin JavaScript Nashorn

Feb 21, 2025 am 10:21 AM

Introducing the Nashorn JavaScript Engine

Oracle telah membangunkan enjin JavaScript baru yang dipanggil Nashorn dalam bahasa pengaturcaraan Java dan mengeluarkannya dengan Java 8. Matlamat Nashorn adalah untuk melaksanakan persekitaran runtime JavaScript yang ringan dan berprestasi tinggi di Java dan menggunakan JVM asli. Dengan menggunakan Nashorn, pemaju boleh membenamkan JavaScript dalam aplikasi Java dan memanggil kaedah dan kelas Java dari kod JavaScript.

mata teras

    Nashorn adalah enjin JavaScript berprestasi tinggi yang dibangunkan oleh Oracle menggunakan Java. Ia membolehkan pemaju untuk membenamkan JavaScript dalam aplikasi Java dan memanggil kaedah dan kelas Java dari kod JavaScript.
  • Matlamat reka bentuk Nashorn termasuk: berdasarkan spesifikasi bahasa ECMASCRIP Prestasi yang lebih baik daripada pendahulunya, Rhino.
  • Dengan Nashorn, JavaScript boleh digunakan sebagai bahasa skrip gaya shell yang kuat, memanfaatkan kesederhanaan JavaScript dan API Java yang kaya. Ia boleh digunakan dalam tetapan untuk aplikasi klien, aplikasi pelayan, aplikasi mudah alih, atau Internet Perkara Kecil (IoT).

Mengapa menyerah badak?

Rhino adalah pendahulu Nashorn. Ia bermula dengan projek Netscape pada tahun 1997 dan dikeluarkan pada tahun 1998.

Rhino telah dikeluarkan selama 16 tahun, dan enjin JavaScript ini telah memenuhi misinya. Oleh itu, pasukan Java memutuskan untuk membangunkan enjin JavaScript baru dari awal, dan bukannya menulis semula yang sedia ada. Ini melahirkan Nashorn (menarik, Nashorn bermaksud badak dalam bahasa Jerman).

Hampir semua orang menggunakan JavaScript dalam pelayar mereka, dan sesetengah orang menggunakannya pada pelayan juga (seperti Node.js), tetapi Nashorn mempunyai tujuan pembangunan yang berbeza. Dengan menggunakan Nashorn, pemaju boleh melaksanakan fungsi berikut:

    Jalankan JavaScript sebagai kod desktop asli.
  • skrip shell ditulis menggunakan JavaScript.
  • memanggil kelas dan kaedah Java dari kod JavaScript.

Matlamat Nashorn

Apabila merancang Nashorn, pemaju menetapkan satu siri matlamat untuknya:

    Ia harus berdasarkan spesifikasi bahasa Versi ECMAScript-262 5.1 dan mesti lulus ujian keserasian ECMAScript-262.
  • Ia harus menyokong API javax.script (JSR 223).
  • Ia sepatutnya membenarkan Java dipanggil dari JavaScript dan sebaliknya.
  • Ia harus menentukan alat perintah JJS untuk menilai kod JavaScript dalam skrip "Shebang" (biasanya bermula dengan #!/Bin/sh), di sini dokumentasi, dan edit rentetan.
  • prestasinya harus bertambah baik daripada badak.
  • Ia tidak sepatutnya menimbulkan risiko keselamatan.
Di samping itu, tiada siapa yang memutuskan bahawa Nashorn tidak termasuk ciri debugging dan tidak menyokong perpustakaan/rangka kerja CSS dan JavaScript. Ini bermakna Nashorn boleh dilaksanakan dalam penyemak imbas tanpa menjadi mimpi ngeri.

Penerangan ringkas JavaScript

Untuk menggunakan JavaScript dalam shell menggunakan alat JJS Nashorn, anda harus terlebih dahulu memasang JDK8, yang boleh anda muat turun secara percuma. Untuk menguji pemasangannya, laksanakan:

>_ javac -version
# 它应该回显
# java version "1.8.x"
jjs -version
# 它应该回显
# nashorn 1.8.x
jjs>

Jika ada masalah dengan arahan pertama atau kedua, cuba tambah JDK ke jalan

Sekarang anda boleh menggunakan JavaScript sebagai skrip shell. Semak contoh mudah ini:

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。 Untuk menjadikannya lebih seperti bash, Nashorn menyediakan pembolehubah argumen untuk mengekstrak parameter baris arahan. Pertimbangkan contoh ini:

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);
    }
}

menjalankannya akan memberikan output ini (parameter adalah selepas -):

>_ 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

Di samping itu, JavaScript boleh menggunakan kelas dan kaedah 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();

output akan:

<code>Another thread
Another thread
One thread
One thread
Another thread</code>

anda dapat melihat dari output bahawa kod itu berbilang threaded. Dengan menggunakan java.type ("java.lang.thread");, kita boleh menghubungi kelas Java dalam kod JavaScript. Nashorn juga membenarkan operasi terbalik, memanggil kod JavaScript dalam kod Java.

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();
        }
    }

}

Contoh ini mencetak saya Java atau JavaScript hanya pada baris 14? Soalan, tetapi ini adalah contoh yang paling mudah untuk meletakkan kod JavaScript ke dalam Java. Anda boleh menggunakan kaedah Java untuk membaca keseluruhan kod sumber dalam fail JavaScript dan kemudian lulus kod tersebut ke kaedah EVAL () sebagai parameter rentetan. Ini akan membolehkan kod JavaScript dilaksanakan di dalam Java.

Kesimpulan

JavaScript ada di mana -mana sekarang! Anda boleh menggunakannya untuk aplikasi klien, aplikasi pelayan, dan lebih baik, kadang -kadang kedua -dua pelanggan dan pelayan. Anda boleh menggunakannya untuk aplikasi mudah alih atau menyediakan IOT kecil. Sekarang, dengan Nashorn, anda boleh menggunakannya sebagai bahasa skrip gaya shell yang kuat, memanfaatkan kesederhanaan JavaScript dan API kaya Java.

soalan yang sering ditanya mengenai enjin nashorn javascript

Apakah enjin JavaScript Nashorn?

Nashorn JavaScript Engine adalah enjin JavaScript berprestasi tinggi yang dibangunkan oleh Oracle untuk Mesin Maya Java (JVMS). Ia direka untuk melaksanakan kod JavaScript secara tempatan di JVM, yang membolehkan Java dan JavaScript berinteraksi dengan lancar. Nashorn memberikan peningkatan prestasi yang signifikan ke atas pendahulunya, Rhino, dan termasuk sokongan untuk keupayaan JavaScript yang lebih baru.

Nashorn与其他JavaScript引擎相比如何?

Nashorn的独特之处在于它专门为JVM设计。这使其能够利用JVM的健壮性、成熟性和性能特性。它还在Java和JavaScript之间提供了一个直接的桥梁,使两种语言能够无缝交互。 Walau bagaimanapun, perlu diperhatikan bahawa Nashorn tidak digunakan secara meluas sebagai enjin JavaScript lain seperti V8 (untuk Node.js dan Chrome) atau Spidermonkey (untuk Firefox).

Bagaimana menggunakan Nashorn dalam aplikasi Java saya?

Untuk menggunakan Nashorn dalam aplikasi Java, anda perlu membuat contoh baru Nashorn ScriptEngine menggunakan kelas Scriptenginemanager. Anda kemudian boleh melaksanakan kod JavaScript menggunakan kaedah Eval () scriptEngine. Berikut adalah contoh mudah:

>_ javac -version
# 它应该回显
# java version "1.8.x"
jjs -version
# 它应该回显
# nashorn 1.8.x
jjs>

Apakah faedah menggunakan Nashorn?

Nashorn menyediakan beberapa faedah. Pertama, ia membolehkan anda melaksanakan kod JavaScript secara tempatan di JVM, yang dapat meningkatkan prestasi. Kedua, ia menyediakan jambatan lancar antara Java dan JavaScript, yang membolehkan anda menggunakan perpustakaan dan kerangka JavaScript dalam aplikasi Java anda. Akhirnya, Nashorn menyokong ciri -ciri JavaScript yang lebih baru, yang boleh menjadikan kod JavaScript anda lebih cekap dan mudah ditulis.

Adakah Oracle masih mengekalkan Nashorn?

Sehingga JDK 11, Oracle telah menamatkan Nashorn. Ini bermakna bahawa walaupun ia masih termasuk dalam JDK, ia tidak lagi aktif dibangunkan atau dikekalkan. Oracle mengesyorkan pemaju mula mencari alternatif.

Apakah beberapa alternatif kepada Nashorn?

Nashorn mempunyai beberapa alternatif, termasuk GraalVM, yang merupakan runtime berprestasi tinggi yang menyokong pelbagai bahasa termasuk JavaScript. Alternatif lain termasuk Rhino, satu lagi enjin JavaScript untuk JVM, dan Node.js, runtime JavaScript yang popular berdasarkan enjin V8 JavaScript Chrome.

Bolehkah saya menggunakan ciri -ciri ES6 di Nashorn?

Nashorn menyokong beberapa ciri ES6, tetapi tidak semuanya. Ini termasuk pengisytiharan LET dan const, fungsi anak panah dan rentetan templat, dll. Walau bagaimanapun, fungsi seperti modul, kelas dan janji tidak disokong.

Bagaimana untuk debug kod JavaScript yang dilaksanakan oleh Nashorn?

Nashorn mengandungi alat baris arahan yang dipanggil JJS yang boleh digunakan untuk melaksanakan dan debug kod JavaScript. Anda juga boleh menggunakan Java Debugger (JDB) untuk debug kod JavaScript yang dilaksanakan oleh Nashorn.

Bolehkah saya menggunakan modul Node.js di Nashorn?

Walaupun Nashorn sendiri tidak menyokong modul Node.js, terdapat beberapa perpustakaan yang dapat menyediakan fungsi ini. Perpustakaan sedemikian adalah avatar.js, yang menyediakan sistem API dan modul serasi node.js di atas Nashorn.

Bagaimana untuk memanggil kaedah Java dari kod JavaScript yang dilaksanakan oleh Nashorn?

Nashorn menyediakan jambatan lancar antara Java dan JavaScript, yang membolehkan anda memanggil kaedah Java secara langsung dari kod JavaScript. Berikut adalah contoh mudah:

jjs> var a = 1
jjs> var b = 4
jjs> print (a+b)
5
jjs>

Respons yang disemak ini mengekalkan imej asal dan formatnya, sambil memupuk teks untuk membuat versi unik artikel.

Atas ialah kandungan terperinci Memperkenalkan Enjin JavaScript Nashorn. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1545
276
Skop dan konteks JavaScript maju Skop dan konteks JavaScript maju Jul 24, 2025 am 12:42 AM

Skop JavaScript menentukan skop kebolehcapaian pembolehubah, yang dibahagikan kepada skop global, fungsi dan tahap blok; Konteks menentukan arah ini dan bergantung kepada kaedah panggilan fungsi. 1. Skop termasuk skop global (boleh diakses di mana sahaja), skop fungsi (hanya sah dalam fungsi), dan skop peringkat blok (biarkan dan const sah dalam {}). 2. Konteks pelaksanaan mengandungi objek pembolehubah, rantaian skop dan nilai -nilai ini. Ini menunjukkan kepada global atau tidak ditentukan dalam fungsi biasa, kaedah panggilan kaedah ke objek panggilan, pembina menunjuk ke objek baru, dan juga boleh ditentukan secara jelas oleh panggilan/memohon/mengikat. 3. Penutupan merujuk kepada fungsi mengakses dan mengingati pembolehubah skop luaran. Mereka sering digunakan untuk enkapsulasi dan cache, tetapi boleh menyebabkan

Vue 3 Composition API vs Pilihan API: Perbandingan Terperinci Vue 3 Composition API vs Pilihan API: Perbandingan Terperinci Jul 25, 2025 am 03:46 AM

COMPOSISAPI dalam VUE3 lebih sesuai untuk logik dan jenis derivasi yang kompleks, dan OptionsAPI sesuai untuk senario dan pemula yang mudah; 1. Optionsapi menganjurkan kod mengikut pilihan seperti data dan kaedah, dan mempunyai struktur yang jelas tetapi komponen kompleks dipecah -pecah; 2. CompositionAPI menggunakan persediaan untuk menumpukan logik yang berkaitan, yang kondusif untuk penyelenggaraan dan penggunaan semula; 3. Compositionapi menyedari penggunaan semula logik bebas konflik dan parameternya melalui fungsi kompos yang lebih baik daripada Mixin; 4. CompositionAPI mempunyai sokongan yang lebih baik untuk typescript dan derivasi jenis yang lebih tepat; 5. Tidak terdapat perbezaan yang signifikan dalam jumlah prestasi dan pembungkusan kedua -duanya; 6.

Menguasai Corak Konvensyen JavaScript: Pekerja Web vs Java Threads Menguasai Corak Konvensyen JavaScript: Pekerja Web vs Java Threads Jul 25, 2025 am 04:31 AM

Terdapat perbezaan penting antara pekerja web JavaScript dan Javathreads dalam pemprosesan serentak. 1. JavaScript mengamalkan model tunggal-thread. WebWorkers adalah benang bebas yang disediakan oleh penyemak imbas. Ia sesuai untuk melaksanakan tugas-tugas yang memakan masa yang tidak menghalang UI, tetapi tidak dapat mengendalikan DOM; 2. Java menyokong multithreading sebenar dari tahap bahasa, yang dibuat melalui kelas thread, sesuai untuk logik serentak dan pemprosesan sisi serentak; 3. WebWorkers menggunakan postmessage () untuk berkomunikasi dengan benang utama, yang sangat selamat dan terpencil; Benang Java boleh berkongsi ingatan, jadi isu penyegerakan perlu diberi perhatian; 4. Pekerja web lebih sesuai untuk pengkomputeran selari depan, seperti pemprosesan imej, dan

Membina alat CLI dengan node.js Membina alat CLI dengan node.js Jul 24, 2025 am 03:39 AM

Memulakan projek dan buat pakej.json; 2. Buat skrip kemasukan index.js dengan shebang; 3. Daftar perintah melalui medan bin dalam pakej.json; 4. Gunakan Yargs dan perpustakaan lain untuk menghuraikan parameter baris arahan; 5. Gunakan ujian tempatan NPMLink; 6. Tambah bantuan, versi dan pilihan untuk meningkatkan pengalaman; 7. Secara pilihan menerbitkan melalui NPMPublish; 8. Secara pilihan mencapai penyelesaian automatik dengan YARGS; Akhirnya buat alat CLI praktikal melalui struktur yang munasabah dan reka bentuk pengalaman pengguna, tugas automasi lengkap atau mengedarkan widget, dan berakhir dengan ayat lengkap.

Bagaimana untuk membuat dan menambahkan elemen di JS? Bagaimana untuk membuat dan menambahkan elemen di JS? Jul 25, 2025 am 03:56 AM

Gunakan document.createelement () untuk membuat elemen baru; 2. Sesuaikan elemen melalui textContent, classlist, setAttribute dan kaedah lain; 3. Gunakan kaedah tambahan () atau lebih fleksibel () untuk menambah elemen ke DOM; 4. Secara pilihan menggunakan InsertBefore (), sebelum () dan kaedah lain untuk mengawal kedudukan penyisipan; Proses lengkap adalah untuk membuat → Sesuaikan → Tambah, dan anda boleh mengemas kini kandungan halaman secara dinamik.

Jenis Bersyarat Lanjutan dalam TypeScript Jenis Bersyarat Lanjutan dalam TypeScript Aug 04, 2025 am 06:32 AM

Jenis Keadaan Lanjutan TypeScript Melaksanakan penghakiman logik antara jenis melalui Textendsu? X: Y Sintaks. Keupayaan terasnya ditunjukkan dalam jenis keadaan yang diedarkan, kesimpulan jenis kesimpulan dan pembinaan alat jenis kompleks. 1. Jenis bersyarat diedarkan dalam parameter jenis kosong dan secara automatik boleh memecah jenis bersama, seperti toarray untuk mendapatkan rentetan [] | number []. 2. Menggunakan Pengagihan untuk Membina Alat Penapisan dan Pengekstrakan: Tidak termasuk Kecualikan Jenis Melalui Textendsu? Tidak pernah: T, Ekstrak Ekstrak Persamaan melalui Textendsu? 3

Mikro Frontends Architecture: Panduan Pelaksanaan Praktikal Mikro Frontends Architecture: Panduan Pelaksanaan Praktikal Aug 02, 2025 am 08:01 AM

Microfrontendssolvescalingchallengesinlargeteamsbyenablingindependentdevelopmentanddeployment.1) chooseanInintegrationstration: useModulefederationInwebPack5formruntimeLoadingandtrueindectivence, Build-timeIntegrationForseMlesetups, Oriframes/Web

Bagaimana untuk mencari panjang array di JavaScript? Bagaimana untuk mencari panjang array di JavaScript? Jul 26, 2025 am 07:52 AM

Untuk mendapatkan panjang pelbagai JavaScript, anda boleh menggunakan harta panjang terbina dalam. 1. Gunakan atribut panjang. Untuk mengembalikan bilangan elemen dalam array, seperti constfruits = ['epal', 'pisang', 'oren']; console.log (fruits.length); // output: 3; 2. Atribut ini sesuai untuk tatasusunan yang mengandungi apa -apa jenis data seperti rentetan, nombor, objek, atau tatasusunan; 3. Atribut panjang akan dikemas kini secara automatik, dan nilainya akan berubah sewajarnya apabila elemen ditambah atau dipadam; 4. Ia mengembalikan kiraan berasaskan sifar, dan panjang array kosong adalah 0; 5. Atribut panjang boleh diubahsuai secara manual untuk memotong atau melanjutkan array,

See all articles