
Object dan Array serta Fitur ES6 di JavaScript
Belajar Pemrograman JavaScript dari Nol #5
JavaScript adalah bahasa pemrograman yang terus berkembang, dan memahami Object dan Array adalah dasar penting untuk menguasainya. Object memungkinkan kita menyimpan data dalam bentuk properti dan nilai, sementara Array berguna untuk mengelola kumpulan data secara terstruktur. Dengan fitur-fitur baru di ES6+, bekerja dengan Object dan Array menjadi lebih efisien dan ekspresif. Mulai dari destructuring, spread operator, hingga metode array yang lebih canggih, semua ini membantu developer menulis kode yang lebih bersih dan mudah dikelola. Jika kamu ingin meningkatkan skill JavaScript, mempelajari konsep ini adalah langkah awal yang tepat.
Baca Juga: Panduan Dasar JavaScript untuk Pemula Pemrograman
Memahami Konsep Object dalam JavaScript
Object adalah salah satu tipe data fundamental di JavaScript yang memungkinkan kita menyimpan kumpulan properti dalam bentuk key-value pairs. Setiap properti bisa berisi nilai primitif (string, number, boolean) atau bahkan function (disebut method).
Contoh sederhana pembuatan object:
const user = {
name: "John",
age: 30,
greet() {
console.log(`Hello, ${this.name}!`);
}
};
user.greet(); // Output: "Hello, John!"
Object sangat fleksibel—kita bisa menambah, mengubah, atau menghapus properti secara dinamis:
user.location = "Jakarta"; // Menambah properti baru
delete user.age; // Menghapus properti
Fitur ES6 memperkenalkan shorthand property dan computed property names untuk membuat object lebih ringkas:
const key = "email";
const person = {
[key]: "[email protected]", // Computed property
sayHi() { // Method shorthand
console.log("Hi!");
}
};
Untuk mempelajari lebih dalam, MDN Web Docs (baca di sini) menjelaskan secara lengkap tentang operasi object seperti Object.keys()
, Object.assign()
, dan konsep prototype.
Object juga bisa bersarang (nested), misalnya:
const company = {
name: "Tech Corp",
employees: {
dev: ["Alice", "Bob"],
hr: ["Charlie"]
}
};
console.log(company.employees.dev[0]); // "Alice"
Pemahaman solid tentang object akan memudahkan kamu bekerja dengan struktur data kompleks di JavaScript.
Baca Juga: Variabel Tipe Data dan Struktur Kontrol JavaScript
Mengenal Array dan Operasinya di JavaScript
Array adalah struktur data untuk menyimpan koleksi elemen secara berurutan. Berbeda dengan object yang menggunakan key-value, array menggunakan indeks numerik (dimulai dari 0).
Contoh deklarasi array:
const fruits = ["Apple", "Banana", "Mango"];
console.log(fruits[1]); // "Banana"
Operasi Dasar Array
- Menambah/Menghapus Elemen:
fruits.push("Orange"); // Tambah di akhir fruits.pop(); // Hapus elemen terakhir fruits.unshift("Strawberry"); // Tambah di awal fruits.shift(); // Hapus elemen pertama
- Menggabungkan Array:
const moreFruits = ["Pineapple", "Kiwi"];
const allFruits = fruits.concat(moreFruits);
// Atau pakai spread operator (ES6+):
const combined = [...fruits, ...moreFruits];
Method Penting Lainnya
map()
: Transformasi elemen
const numbers = [1, 2, 3];
const squared = numbers.map(num => num * 2); // [2, 4, 6]
filter()
: Seleksi elemen
const evens = numbers.filter(num => num % 2 === 0); // [2]
reduce()
: Akumulasi nilai
const sum = numbers.reduce((total, num) => total + num, 0); // 6
Untuk eksplorasi lengkap, cek dokumentasi MDN tentang Array.
Array vs Object
- Gunakan array untuk data terurut (misal: daftar belanja).
- Gunakan object untuk data terstruktur dengan properti unik (misal: profil user).
Contoh array multidimensi:
const matrix = [
[1, 2],
[3, 4]
];
console.log(matrix[1][0]); // 3
Baca Juga: Konsep Dasar Pemrograman dan Algoritma Logika
Fitur ES6 yang Wajib Dikuasai Developer
ES6 (ECMAScript 2015) membawa revolusi dalam JavaScript dengan fitur-fitur yang membuat kode lebih ringkas dan ekspresif. Berikut beberapa yang paling penting:
1. Arrow Functions
Fungsi dengan sintaks lebih pendek dan lexical this
:
const add = (a, b) => a + b;
console.log(add(2, 3)); // 5
Berguna untuk callback:
const numbers = [1, 2, 3];
numbers.forEach(num => console.log(num * 2));
2. Template Literals
Membuat string dinamis dengan mudah:
const name = "Alice";
console.log(`Hello, ${name}!`); // "Hello, Alice!"
3. Destructuring
Ekstrak nilai dari object/array secara langsung:
const user = { name: "Bob", age: 25 };
const { name, age } = user; // name = "Bob", age = 25
const [first, second] = [10, 20]; // first = 10
4. Spread/Rest Operator
- Spread: Menggabungkan array/object:
const arr1 = [1, 2];
const arr2 = [...arr1, 3]; // [1, 2, 3]
- Rest: Mengumpulkan sisa argumen:
const sum = (...args) => args.reduce((a, b) => a + b);
sum(1, 2, 3); // 6
5. Modules (import/export)
Memecah kode menjadi file modular:
// file: math.js
export const PI = 3.14;
// file: app.js
import { PI } from './math.js';
6. Class
Sintaks OOP yang lebih jelas:
class Person {
constructor(name) {
this.name = name;
}
greet() {
console.log(`Hi, I'm ${this.name}`);
}
}
Dokumentasi lengkap: ES6 Features di MDN.
Pro Tip: Fitur seperti Promise
, let/const
, dan default parameters
juga wajib dipelajari untuk kode yang lebih solid.
Baca Juga: Apa Itu JavaScript dan Environment JavaScript
Destructuring Assignment pada Object dan Array
Destructuring adalah fitur ES6 yang memungkinkan ekstraksi nilai dari object atau array ke dalam variabel terpisah dengan sintaks yang ringkas. Ini sangat berguna untuk mengurangi kode boilerplate dan meningkatkan readability.
1. Destructuring Object
Ekstrak properti object langsung ke variabel:
const user = { name: 'John', age: 30, isAdmin: true };
// Cara tradisional
const name = user.name;
const age = user.age;
// Pakai destructuring
const { name, age, isAdmin } = user;
console.log(name); // "John"
Default Values & Renaming
const { name, role = 'user' } = user; // Default value jika `role` tidak ada
const { name: userName } = user; // Rename `name` jadi `userName`
2. Destructuring Array
Ekstrak elemen berdasarkan posisi:
const numbers = [1, 2, 3];
const [first, second] = numbers;
console.log(first); // 1
Melewati Elemen & Rest Pattern
const [a, , c] = [1, 2, 3]; // Skip elemen kedua (a=1, c=3)
const [head, ...tail] = [1, 2, 3]; // tail = [2, 3]
3. Destructuring Nested
Untuk struktur data kompleks:
const book = {
title: 'JavaScript ES6',
author: { name: 'Alice', country: 'USA' }
};
const { author: { name: authorName } } = book;
console.log(authorName); // "Alice"
4. Destructuring di Parameter Fungsi
Langsung ekstrak nilai dari parameter object:
function greet({ name, age }) {
console.log(`Hello ${name}, you're ${age} years old`);
}
greet(user); // Hello John, you're 30 years old
Referensi:
Kapan Dipakai?
- Saat bekerja dengan data API response.
- Memperjelas dependency parameter fungsi.
- Mengurangi repetisi kode.
Contoh praktis:
// Swap variabel tanpa temp
let a = 1, b = 2;
[a, b] = [b, a]; // a=2, b=1
Baca Juga: IoT dan Teknologi Smart City di Era Digital
Spread dan Rest Operator di ES6
Dua fitur ES6 ini menggunakan sintaks ...
tapi dengan fungsi berbeda.
1. Spread Operator
Memecah iterable (array/object) menjadi elemen individual.
Contoh Penggunaan:
- Menggabungkan Array
const arr1 = [1, 2];
const arr2 = [3, 4];
const combined = [...arr1, ...arr2]; // [1, 2, 3, 4]
- Menyalin Array/Object (Shallow Copy)
const original = [1, 2, 3];
const copy = [...original]; // Clone array
const user = { name: 'Alice' };
const userClone = { ...user, age: 25 }; // { name: 'Alice', age: 25 }
- Mengubah NodeList ke Array
const divs = [...document.querySelectorAll('div')]; // Bisa pakai map/filter
2. Rest Operator
Mengumpulkan sisa elemen menjadi array/object.
Contoh Penggunaan:
- Parameter Fungsi
function sum(...numbers) {
return numbers.reduce((total, num) => total + num, 0);
}
sum(1, 2, 3); // 6
- Destructuring
const [first, ...rest] = [1, 2, 3]; // first=1, rest=[2, 3]
const { name, ...details } = { name: 'Bob', age: 30, role: 'dev' };
Perbedaan Kunci
Spread | Rest |
---|---|
Memecah koleksi | Menggabungkan elemen |
Dipakai di array/object literal | Dipakai di parameter/destructuring |
Referensi:
Contoh Nyata:
// Gabungkan object dengan overwrite property
const defaults = { theme: 'light', fontSize: 16 };
const userPref = { theme: 'dark' };
const finalConfig = { ...defaults, ...userPref }; // { theme: 'dark', fontSize: 16 }
Catatan:
- Spread/Rest tidak bekerja di object biasa sebelum ES2018.
- Untuk deep clone, tetap diperlukan
JSON.parse(JSON.stringify(obj))
atau library seperti Lodash.
Arrow Function dan Penggunaannya
Arrow function (=>
) adalah sintaks ES6 untuk menulis fungsi lebih ringkas dengan lexical this
.
1. Sintaks Dasar
// Tradisional
function add(a, b) { return a + b; }
// Arrow function
const add = (a, b) => a + b;
- Jika hanya 1 parameter, kurung bisa dihilangkan:
const square = x => x * x;
- Untuk body multi-line, gunakan
{}
danreturn
:
const greet = name => {
const message = `Hello, ${name}`;
return message;
};
2. Perilaku this
Perbedaan utama: arrow function tidak punya this
sendiri, melainkan mengambil dari lingkup luarnya.
const person = {
name: "Alice",
traditionalFunc: function () { console.log(this.name); }, // "Alice"
arrowFunc: () => console.log(this.name) // undefined (karena `this` mengacu ke window)
};
3. Use Case Terbaik
- Callback Pendek
const numbers = [1, 2, 3];
const doubled = numbers.map(num => num * 2);
- Method Chaining
fetch(url)
.then(response => response.json())
.then(data => console.log(data));
4. Kapan Tidak Dipakai?
- Method dalam Object (karena butuh
this
milik object). - Constructor/Prototype (arrow function tidak bisa jadi constructor).
- Event Handlers (jika butuh
this
dari target event).
Referensi:
Contoh Real-World:
// Filter array dengan kondisi kompleks
const users = [
{ id: 1, name: "John", isActive: true },
{ id: 2, name: "Jane", isActive: false }
];
const activeUsers = users.filter(user => user.isActive);
Pro Tip:
- Gunakan arrow function untuk fungsi yang tidak membutuhkan konteks
this
sendiri. - Hindari jika memerlukan
arguments
object (karena arrow function tidak memilikinya).
Baca Juga: Metode String ECMAScript 6 dalam JavaScript
Template Literals untuk String yang Dinamis
Template literals (dibuat dengan backticks `
) adalah fitur ES6 untuk membuat string dengan:
- Embedded expressions (menggunakan
${expression}
) - Multi-line strings tanpa perlu
\n
- Tagged templates (untuk parsing khusus)
1. Dasar Penggunaan
const name = "Alice";
const age = 25;
// Cara lama (concatenation)
const oldWay = "Hello " + name + ", you're " + age + " years old";
// Pakai template literal
const newWay = `Hello ${name}, you're ${age} years old`;
2. Multi-line Strings
Tanpa template literal:
const message = "Line 1\n" +
"Line 2\n" +
"Line 3";
Dengan template literal:
const message = `
Line 1
Line 2
Line 3
`;
3. Ekspresi Kompleks
Bisa berisi operasi JavaScript dalam ${}
:
const price = 10;
const tax = 0.5;
console.log(`Total: $${price + price * tax}`); // "Total: $15"
4. Tagged Templates
Fungsi khusus untuk memproses template literal:
function highlight(strings, ...values) {
return strings.reduce((result, str, i) =>
`${result}${str}<mark>${values[i] || ''}</mark>`, '');
}
const name = "John";
const age = 30;
const output = highlight`Hello ${name}, you're ${age} years old`;
// Hasil: "Hello <mark>John</mark>, you're <mark>30</mark> years old"
Referensi:
Contoh Nyata:
// Dynamic HTML generation
const items = ['Coffee', 'Tea', 'Milk'];
const html = `
<ul>
${items.map(item => `<li>${item}</li>`).join('')}
</ul>
`;
Pro Tip:
- Gunakan untuk:
- String dengan variabel/ekspresi dinamis.
- SQL/HTML templates.
- Formatting pesan error.
- Hindari jika string sangat sederhana (misal:
const greeting = 'hello'
).
Baca Juga: Memahami Tipe Data Primitif JavaScript
Class dan Module dalam ES6
ES6 memperkenalkan sintaks class
dan module
untuk mengelola kode JavaScript secara terstruktur, mirip bahasa OOP seperti Java/Python (tapi tetap berbasis prototype di balik layar).
1. Class Dasar
class Person {
constructor(name) {
this.name = name;
}
greet() {
console.log(`Hello, ${this.name}!`);
}
}
const alice = new Person("Alice");
alice.greet(); // "Hello, Alice!"
Fitur Class ES6:
- Inheritance (pakai
extends
):
class Developer extends Person {
constructor(name, language) {
super(name); // Panggil constructor parent
this.language = language;
}
code() {
console.log(`${this.name} codes in ${this.language}`);
}
}
- Static Methods (langsung melekat ke class, bukan instance):
class MathUtils {
static square(x) { return x * x; }
}
MathUtils.square(3); // 9
2. Modules
Memecah kode ke file terpisah dengan export
/import
.
Contoh Modularisasi:
// file: math.js
export const PI = 3.14;
export function sum(a, b) { return a + b; }
// file: app.js
import { PI, sum } from './math.js';
console.log(sum(PI, 10)); // 13.14
Export Default (untuk 1 nilai utama per file):
// file: logger.js
export default function(message) { console.log(message); }
// file: app.js
import log from './logger.js';
log("Hello Modules!");
Referensi:
Catatan Penting:
- Class ES6 adalah “syntactic sugar” untuk prototype.
- Module harus di-load dengan
<script type="module">
di browser. - Gunakan bundler seperti Webpack/Rollup untuk kompatibilitas luas.
Contoh Nyata:
// React Component dengan Class
class Button extends React.Component {
render() {
return <button>{this.props.label}</button>;
}
}
Baca Juga: Tutorial Svelte Todo List Aplikasi Sederhana
Map dan Set Struktur Data Baru
ES6 memperkenalkan Map
dan Set
sebagai alternatif lebih powerful dibanding object/array tradisional untuk kasus tertentu.
1. Map
Koleksi key-value dengan fleksibilitas lebih:
- Key bisa tipe data apa pun (object, function, dll), bukan cuma string/symbol.
- Mempertahankan urutan insertion.
Contoh Penggunaan:
const map = new Map();
// Menambah data
map.set('name', 'Alice'); // Key string
map.set(1, 'Number One'); // Key number
map.set({ id: 1 }, 'Object Key'); // Key object
console.log(map.get('name')); // "Alice"
console.log(map.has(1)); // true
// Iterasi
map.forEach((value, key) => console.log(key, value));
// Convert ke Array
Array.from(map); // [ ['name', 'Alice'], [1, 'Number One'], [...] ]
Perbedaan vs Object:
Map | Object |
---|---|
Key bisa tipe apa pun | Hanya string/symbol |
Punya method .size | Harit hitung manual |
Urutan elemen terjaga | Tidak terjamin |
2. Set
Koleksi nilai unik (duplikat otomatis dihapus):
const set = new Set();
set.add(1);
set.add(2);
set.add(1); // Diabaikan
console.log(set.size); // 2
console.log(set.has(2)); // true
// Hapus duplikat dari array
const numbers = [1, 2, 2, 3];
const unique = [...new Set(numbers)]; // [1, 2, 3]
Method Utama:
.add()
/.delete()
/.clear()
.entries()
/.values()
Referensi:
Kapan Dipakai?
- Map:
- Butuh key non-string (misal: mapping DOM element ke data).
- Butuh iterasi berurutan.
- Set:
- Menyimpan daftar unik (misal: ID user).
- Cek keanggotaan cepat (
O(1)
).
Contoh Nyata:
// Tracking item unik di shopping cart
const cart = new Set();
cart.add('item1');
cart.add('item2');
cart.add('item1'); // Tidak berpengaruh
Async Await untuk Handling Promise
Async/Await untuk Handling Promise
Async/await adalah sintaks ES2017 yang membuat kode asynchronous (berbasis Promise) terlihat seperti synchronous, sehingga lebih mudah dibaca dan dikelola.
1. Dasar Penggunaan
- Fungsi dengan
async
selalu mengembalikan Promise. await
hanya bisa dipakai di dalamasync function
.
Contoh:
async function fetchData() {
const response = await fetch('https://api.example.com/data'); // Pause sampai Promise selesai
const data = await response.json(); // Pause lagi
return data;
}
// Pemanggilan
fetchData().then(data => console.log(data));
2. Error Handling
Gunakan try/catch
untuk menangani error:
async function loadUser() {
try {
const response = await fetch('/user');
if (!response.ok) throw new Error('Network error');
return await response.json();
} catch (error) {
console.error('Fetch failed:', error);
return null;
}
}
3. Parallel Execution
Untuk menjalankan beberapa Promise secara bersamaan:
async function fetchAll() {
const [users, posts] = await Promise.all([
fetch('/users'),
fetch('/posts')
]);
// Proses hasil...
}
4. Async di Top-Level
Di modul ES6 atau lingkungan modern:
// Top-level await (hanya work di module)
const data = await fetchData();
console.log(data);
Referensi:
Perbandingan dengan Promise Chaining:
// Dengan Promise
fetch('/user')
.then(response => response.json())
.then(user => fetch(`/posts/${user.id}`))
.catch(error => console.error(error));
// Dengan async/await
async function getUserPosts() {
const user = await fetch('/user').then(res => res.json());
return await fetch(`/posts/${user.id}`);
}
Kapan Tidak Dipakai?
- Saat butuh operasi sederhana yang cukup dengan
.then()
. - Di lingkungan lama yang tidak support ES2017+ (kecuali pakai Babel).
Contoh Nyata:
// Form submission
async function handleSubmit() {
const data = { username: 'alice' };
const response = await fetch('/api/submit', {
method: 'POST',
body: JSON.stringify(data)
});
return response.status === 200;
}

Memahami ES6+ Features seperti object, array, dan fitur modern lainnya adalah kunci untuk menulis kode JavaScript yang lebih efisien dan mudah dikelola. Dari arrow function yang ringkas hingga async/await yang mempermudah handling asynchronous, fitur-fitur ini membantu developer menghindari boilerplate dan fokus pada logika inti. Dengan menguasai konsep-konsep ini, kamu bisa memanfaatkan JavaScript secara maksimal, baik untuk pengembangan web, mobile, maupun backend. Mulailah eksplorasi lebih dalam dan praktikkan langsung di proyek nyata untuk merasakan manfaatnya.
Tag:Array JavaScript, Arrow Function, async await, Class JavaScript, Destructuring Assignment, ES6 Features, Fitur Modern, Fungsi JavaScript, Kode Efisien, Konsep JavaScript, Module JavaScript, Object JavaScript, Pemrograman Web, Promise Handling, Rest Operator, Spread Operator, struktur data, Syntax Modern, Template Literals