Kodealgo

Perbedaan JavaScript dan ECMAScript

Ketika diawal saya belajar JavaScript, saya kebingungan memahami keterkaitan antara JavaScript dan ECMAScript, sebagian besar informasi yang saya dapatkan banyak yang ambigu dan membingungkan.

Istilah ECMAScript sering muncul ketika mencari informasi seputar versi JavaScript.

Memahami keterkaitan antara ECMAScript dan JavaScript dapat memudahkan kita dalam memahami versi JavaScript.

Untuk memudahkan pemahaman, disarankan untuk membaca sejarah JavaScript terlebih dahulu, disana saya membahas sejarahnya termasuk perang browser hingga JavaScript lahir dan diajukan ke Ecma International.

Perbedaan JavaScript dan ECMAScript

Singkatnya, ECMAScript merupakan spesifikasi yang ditentukan dalam ECMA-262 oleh Ecma International untuk membuat bahasa skrip.

Kita tau bahwa ketika terjadi perang browser dan setelahnya, banyak bermunculan bahasa skrip, salah satunya adalah JScript yang dibuat Microsoft.

Oleh karena itu, agar halaman web dapat berjalan di berbagai browser dibuatlah spesifikasi untuk bahasa skrip.

Untuk memperjelas, mari kita ulas beberapa istilah yang terkait dengan pernyataan tersebut:

Ecma International

Ecma International adalah organisasi yang membuat standar teknologi sistem informasi dan komunikasi.

Untuk mengilustrasikan contoh standar, mari kita pikirkan tentang keyboard fisik yang sering kita gunakan, entah itu di kantor, rumah, atau ditempat lain.

Sebagian besar tombol pada keyboard tersebut memiliki urutan yang sama, misalnya tombol "H" berada di bawah tombol "Y" dan diatas tombol "N".

Hal ini dikarenakan sebagian besar produsen keyboard mendasarkan desain keyboard mereka pada standar tata letak QWERTY.

ECMA-262

ECMA-262 adalah standar yang diterbitkan oleh Ecma International yang berisi spesifikasi untuk bahasa skrip.

Sebetulnya ada banyak standar teknologi sistem informasi dan komunikasi yang sudah dibuat oleh organisasi, khusus untuk standar bahasa skrip diatur dalam ECMA-262.

Bayangkan ECMA-262 sebagai nomor referensi ECMAScript.

Bahasa Skrip

Bahasa skrip adalah bahasa pemrograman yang tidak memerlukan langkah kompilasi. Semua bahasa skrip adalah bahasa pemrograman, namun tidak semua bahasa pemrograman adalah bahasa skrip.

Bahasa skrip menggunakan program yang dikenal sebagai interpreter untuk menerjemahkan kode tanpa memerlukan langkah kompilasi.

Mislanya, untuk menjalankan kode bahasa pemrograman C diperlukan langkah untuk mengkompilasi terlebih dahulu, sedangkan bahasa skrip seperti PHP dan JavaScript tidak perlu dikompilasi.

ECMAScript

ECMAScript adalah spesifikasi yang ditentukan dalam ECMA-262 untuk membuat bahasa skrip.

ECMAScript memberikan aturan, detail, dan pedoman yang harus dipatuhi oleh bahasa skrip agar dianggap sesuai dengan ECMAScript.

JavaScript

JavaScript adalah bahasa skrip yang dibuat sesuai dengan spesifikasi ECMAScript.

Dengan membaca spesifikasi ECMAScript, Anda mempelajari cara membuat bahasa skrip.

Dengan membaca dokumentasi JavaScript, Anda mempelajar cara menggunakan bahasa skrip.

Mesin JavaScript (Interpreter)

Mesin atau interpreter JavaScript adalah program yang memahami dan menjalankan kode JavaScript.

Mesin JavaScript dapat ditemukan di berbagai browser web, Google Chrome dan Microsoft Edge terbaru menggunakan mesin bernama V8, sedangkan Firefox menggunakan SpiderMonkey.

Dukungan Browser

Tidak semua orang mengetahui istilah baru "warganet" yang telah resmi dimasukkan ke dalam KBBI, bayangkan KBBI sebagai ECMAScript sedangkan Kemdikbud sebagai Ecma International.

Meskipun orang-orang sudah memahami bahasa Indonesia, tapi tidak semuanya memahami istilah "warganet", misalnya orang tua kita yang sudah lanjut usia.

Begitu pula dengan browser, karena mesin yang digunakan berbeda, meskipun semuanya memahami JavaScript.

Hal ini membuat beberapa mesin JavaScript di dalam browser memiliki pemahaman yang berbeda dibanding yang lain.

Sebagai pengembang aplikasi kita biasanya ingin tau apakah Google sudah memperbarui mesin JavaScript V8 ke versi ECMAScript terbaru atau belum, begitu pula dengan Mozilla dengan SpiderMonkey-nya.

Kita sudah mengetahui bahwa ECMAScript adalah spesifikasi untuk bahasa skrip.

Jadi, ketika Ecma International merilis versi terbaru ECMAScript tidak berarti semua mesin JavaScript otomatis memiliki fitur baru tersebut.

Adopsi ECMAScript terbaru sepenuhnya bergantung pada organisasi atau kelompok yang mengembangkan mesin tersebut. Mereka biasanya mengadopsi fitur ECMASript terbaru secara bertahap.

Oleh karena itu dokumentasi fitur baru JavaScript biasanya dilengkapi tabel kompatibilitas browser.

Runtime

Runtime adalah tempat kode JavaScript berjalan dan diinterpretasikan oleh mesin JavaScript. Di sisi klien tempatnya adalah browser seperti Chrome atau Firefox, sedangkan di sisi server adalah Node.js.

Setiap runtime memiliki objek global yang dapat diakses oleh kode program, di browser misalnya kita bisa menampilkan dialog pop-up dengan mengakses method yang ada di dalam objek window.

window.alert('Hello World!');

Sesuai dengan namanya, kode tersebut akan menampilkan pop-up peringatan berisi teks Hello World!. Kode tersebut tidak akan bisa dijalankan di sisi server karena Node.js tidak memiliki objek window.

Node.js dibuat dengan tujuan agar kode JavaScript dapat dijalankan tanpa browser.

Runtime Node.js memberikan akses aplikasi back-end ke berbagai fitur yang tidak ada di browser, seperti akses sitem file server, database, jaringan dan sebagainya.

Contoh, kode dibawah ini akan membuat file hello.txt di dalam folder /var/www yang berisi tulisan Hello World!, jika berhasil akan menampilkan teks File berhasil dibuat! di konsol, jika gagal akan menampilkan pesan kesalahan.

Kode ini tidak bisa dijalankan di browser.

const fs = require('fs');

fs.writeFile('/var/www/hello.txt', 'Hello World!', function (err) {
  if (err) {
    return console.log(err);
  }

  console.log('File berhasil dibuat!');
});

Versi ECMAScript

Karena JavaScript adalah bahasa skrip pertama yang diajukan ke Ecma International, JavaScript menjadi standar spesifikasi ECMAScript.

Banyak pengembang yang menganggap bahwa ECMAScript adalah nama resmi dari JavaScript.

Mungkin yang lebih tepat, JavaScript adalah bahasa skrip atau bahasa pemrograman, sedangkan ECMAScript adalah spesifikasi untuk membuat bahasa skrip.

Ketika membaca versi, biasanya saya menyebutnya dengan "JavaScript ECMAScript 1" untuk ECMAScript 1 edisi pertama yang dirilis tahun 1997, begitu juga dengan versi yang lebih baru.

Versi ECMAScript juga biasa disingkat sebagai ES1 untuk ECMAScript 1 sampai dengan ES5 untuk ECMAScript 5.

Sejak versi ES6, namanya berubah menjadi ECMAScript 2015 sesuai dengan tahun rilisnya, karena Ecma International memutuskan untuk beralih ke rilis tahunan, biasanya dirilis pada bulan Juni.

Oleh karena itu, Ecma International juga mulai memberikan nama edisi baru spesifikasi ECMAScript berdasarkan tahun peluncurannya.

Jangan bingung antara ES6, ECMAScript 2015, dan ES2015, ketiganya merujuk ke versi yang sama.

Jadi untuk versi lanjutan dari ECMAScript 2016 bukan ES7 melainkan ES2016 atau ECMAScript 2016.

Konvensi penamaan ini juga digunakan oleh file konfigurasi TypeScript:

tsconfig.json
{
  "compilerOptions": {
    "target": "ES2016"
              /**
              ES3(default),
              ES5,
              ES6/ ES2015(sinonim),
              ES7/ ES2016,
              ES2017,
              ES2018,
              ES2019,
              ES2020,
              ESNext
              */
  }
}

Berikut daftar versi ECMAScript:

Nama ResmiNama LainTahun Rilis
ECMAScript 1ES11997
ECMAScript 2ES21998
ECMAScript 3ES31999
ECMAScript 4ES4Tidak dirilis
ECMAScript 5ES52009
ECMAScript 2015ES6/ES20152015
ECMAScript 2016ES20162016
ECMAScript 2017ES20172017
ECMAScript 2018ES20182018
ECMAScript 2019ES20192019
ECMAScript 2020ES20202020

Selain nama versi dalam daftar di atas, ada juga yang disebut dengan EX.Next atau ESNext.

Tapi itu bukan nama versi melainkan nama yang mengacu pada versi ECMAScript terbaru yang belum dirilis termasuk proposal tahap 4.