Site icon JocoDEV

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]: "john@example.com", // 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

  1. 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
  2. Menggabungkan Array:
const moreFruits = ["Pineapple", "Kiwi"];
const allFruits = fruits.concat(moreFruits);
// Atau pakai spread operator (ES6+):
const combined = [...fruits, ...moreFruits];

Method Penting Lainnya

const numbers = [1, 2, 3];
const squared = numbers.map(num => num * 2); // [2, 4, 6]
const evens = numbers.filter(num => num % 2 === 0); // [2]
const sum = numbers.reduce((total, num) => total + num, 0); // 6

Untuk eksplorasi lengkap, cek dokumentasi MDN tentang Array.

Array vs Object

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

const arr1 = [1, 2];
const arr2 = [...arr1, 3]; // [1, 2, 3]
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?

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:

const arr1 = [1, 2];
const arr2 = [3, 4];
const combined = [...arr1, ...arr2]; // [1, 2, 3, 4]
const original = [1, 2, 3];
const copy = [...original]; // Clone array
const user = { name: 'Alice' };
const userClone = { ...user, age: 25 }; // { name: 'Alice', age: 25 }
const divs = [...document.querySelectorAll('div')]; // Bisa pakai map/filter

2. Rest Operator

Mengumpulkan sisa elemen menjadi array/object.

Contoh Penggunaan:

function sum(...numbers) {
	return numbers.reduce((total, num) => total + num, 0);
}
sum(1, 2, 3); // 6
const [first, ...rest] = [1, 2, 3]; // first=1, rest=[2, 3]
const { name, ...details } = { name: 'Bob', age: 30, role: 'dev' };

Perbedaan Kunci

SpreadRest
Memecah koleksiMenggabungkan elemen
Dipakai di array/object literalDipakai 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:

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;
const square = x => x * x;
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

const numbers = [1, 2, 3];
const doubled = numbers.map(num => num * 2);
fetch(url)
	.then(response => response.json())
	.then(data => console.log(data));

4. Kapan Tidak Dipakai?

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:

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:

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:

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:

class Developer extends Person {
	constructor(name, language) {
		super(name); // Panggil constructor parent
		this.language = language;
	}
	code() {
		console.log(`${this.name} codes in ${this.language}`);
	}
}
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:

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:

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:

MapObject
Key bisa tipe apa punHanya string/symbol
Punya method .sizeHarit hitung manual
Urutan elemen terjagaTidak 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:

Referensi:

Kapan Dipakai?

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

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?

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;
}
Photo by Patrick Martin on Unsplash

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.

Exit mobile version