JavaScript adalah bahasa pemrograman; Node.js adalah runtime, yaitu program yang menjalankan JavaScript di luar browser. Sintaks, tipe, dan object standar (Array, Promise, JSON) sama di keduanya. Yang berubah adalah lingkungan di sekitar kodemu: browser memberimu window dan document untuk mengolah halaman web, sedangkan Node.js memberimu global, process, require, dan module seperti fs untuk mengolah file, server, dan sistem operasi.
Global milik browser mencetak undefined, global milik Node.js mencetak object atau function, dan baris terakhir mencetak true, karena di Node.js globalThis dan global adalah object yang sama. Tempelkan enam baris pertama ke console browser dan hasilnya terbalik.
Perbedaannya dalam satu tabel
| JavaScript di browser | JavaScript di Node.js | |
|---|---|---|
| Apa itu | Bahasanya, dijalankan oleh engine browser | Bahasa yang sama, dijalankan oleh runtime Node.js (V8) |
| Global object | window | global |
| Bekerja dengan | Halaman: document, DOM, event | Mesin: fs, http, process, os |
| Module | <script type="module">, import | require (CommonJS) dan import (ES module) |
| Package | Dibundel ke dalam halaman | Di-install ke node_modules dengan npm |
| Input | Klik, form, event keyboard | Argumen command line, standard input, request HTTP |
Array, Promise, JSON, setTimeout, console | Ya | Ya |
Baris module adalah yang paling sering membuat orang bingung. Node.js mendukung kedua sistem, require dan import, sedangkan browser hanya mengerti import. Halaman CommonJS vs ES modules menjelaskan mana yang sebaiknya dipilih.
Bahasanya sama
Fungsi yang hanya memakai fitur bahasa bisa berjalan di mana saja. Blok ini tidak berisi apa pun yang khusus Node, dan akan mencetak baris yang sama di browser:
Hasilnya {"best":95,"average":85} dan Passed: 2 of 3. Spread syntax, reduce, template string, dan JSON adalah bagian dari bahasa, didefinisikan oleh standar ECMAScript, jadi setiap runtime memilikinya.
Yang hanya dimiliki Node.js
Bagian yang khusus Node adalah kumpulan module bawaan dan global yang berbicara dengan sistem operasi:
Program ini menulis file, membacanya kembali, dan mencetak .txt 2 lines, lalu daftar argumen yang kosong. Akses file maupun process.argv tidak ada di browser, karena halaman web tidak boleh menyentuh disk-mu.
Fitur bahasa mana yang kamu dapat
Bahasanya punya versi (ES2015, ES2020, ES2024, dan seterusnya), dan setiap engine menambahkan fitur baru dengan kecepatannya sendiri. Node.js membawa satu versi engine V8 tertentu di setiap rilis, jadi versi Node.js-mu menentukan fitur mana yang bekerja: Object.groupBy dan Array.prototype.findLast, misalnya, butuh versi yang cukup baru. Karena itu tabel fitur browser mencantumkan Node.js sebagai satu kolom lagi di samping Chrome, Firefox, dan Safari. Jalankan node --version saat sintaks yang lebih baru gagal dengan SyntaxError atau sebuah method bernilai undefined, dan upgrade dulu sebelum mencari polyfill.
Menulis kode yang berjalan di keduanya
Pembuat library kadang mengecek di mana kodenya berjalan sebelum memakai API yang khusus untuk satu lingkungan:
const isNode = typeof process !== 'undefined' && process.versions?.node != null;
const isBrowser = typeof window !== 'undefined';
Sebisa mungkin, cek fitur yang kamu butuhkan, bukan nama lingkungannya: typeof fetch === 'function' lebih bermakna daripada "apakah ini Node". Keduanya sekarang punya fetch, URL, TextEncoder, setTimeout, dan structuredClone, jadi kode yang butuh pengecekan lebih sedikit dibanding beberapa tahun lalu.
Kesalahan umum
Memakai document atau window di script Node.js. Kamu akan mendapat ReferenceError: document is not defined. Kode itu tempatnya di browser.
Memakai require di browser. Browser tidak memilikinya. Pakai import, atau bundler yang mengubah panggilan require menjadi satu file.
Mengira Node.js adalah bahasa yang berbeda. Bukan. Kalau tutorial JavaScript mengajarkannya, itu bekerja di Node.js, kecuali kalau memakai DOM.
Pertanyaan yang sering diajukan
Bisakah aku belajar Node.js tanpa belajar JavaScript?
Tidak juga. Setiap baris yang kamu tulis di Node.js adalah JavaScript, jadi bahasanya dulu. Setelah kamu paham fungsi, object, dan promise, Node.js tinggal sekumpulan API tambahan untuk dipelajari.
Kenapa muncul "document is not defined" di Node.js?
document adalah DOM milik browser, dan Node.js tidak punya halaman yang bisa memberikannya. Kode yang menyentuh document atau window harus berjalan di browser, atau di setup pengujian yang memalsukan DOM, seperti jsdom.
Apakah TypeScript sama dengan Node.js?
Bukan. TypeScript adalah versi JavaScript dengan tipe yang di-compile menjadi JavaScript. Hasilnya bisa kamu jalankan di Node.js atau di browser, dan versi Node.js terbaru juga bisa menjalankan banyak file .ts secara langsung dengan membuang tipenya.