ES6 Untuk Manusia
Artikel ini adalah translasi langsung dari artikel Deepak Grover.
1. let, const dan skop blok
let
memungkinkan Anda membuat deklarasi yang hanya berlaku dalam satu blok, disebut skop blok. Berbeda dengan menggunakan var
yang berlaku pada skop fungsi, sangat disarankan menggunakan let
di ES6.
Satu lagi pendeklarasian skop blok adalah dengan menggunakan const
, yang membuat konstan. Di ES6, const mewakili konstan referensi pada nilai. Dengan kata lain, nilai tidak terkunci, hanya penempatan ulang yang terkunci. Ini contoh sederhananya:
Yang perlu diingat:
- Penarikan
let
danconst
berbeda dengan penarikan variabel dan fungsi. Keduanyalet
danconst
bisa ditarik, tapi tidak bisa diakses sebelum dideklarasikan, karena Temporal Dead Zone let
danconst
hanya berlaku pada blok yang paling dekat dengannya.- Ketika menggunakan
const
, gunakan CAPITAL_CASING (ini kebiasaan umum). const
harus didefinisikan dengan pendeklarasiannya.
2. Fungsi Tanda Panah
Fungsi tanda panah adalah cara singkat penulisan fungsi di ES6. Pendefinisian fungsi tanda panah terdiri dari daftar parameter ( ...
), diikuti dengan tanda =>
dan isi fungsi.
Sebagai catatan pada contoh di atas, penggunaan fungsi tanda panah menggunakan “isi yang ringkas” yang tidak membutuhkan statemen return
yang jelas.
Ini contoh dengan “blok isi” yang biasa
Tunggu! Masih ada lagi…
Fungsi tanda panah tidak hanya membuat fungsi jadi lebih pendek. Tapi juga pada prilaku this
di dalamnya.
Fungsi tanda panah dengan keyword this
berbeda dengan fungsi normal. Masing-masing fungsi pada JavaScript memiliki this
-nya masing-masing tapi fungsi tanda panah mengambil this
dari blok yang paling dekat dengannya. Coba lihat kode di bawah:
Di ECMAScript 3/5, masalah seperti ini diperbaiki dengan menggunakan this
dari yang paling dekat.
Seperti dijelaskan sebelumnya, fungsi tanda panah mengambil this dari blok yang paling dekat dengannya, jadi kode di bawah akan berjalan seperti yang diharapkan, bahkan dengan fungsi tanda panah yang bersarang.
Baca lebih lanjut tentang ‘Lexical this’ di fungsi tanda panah di sini
3. Nilai Standar Parameter Fungsi
ES6 memungkinkan Anda untuk menset nilai standar parameter fungsi. Ini ilustrasi simpel nya.
4. Operator Spread / Rest
Operator ...
disebut sebagai operator spread atau rest, bergantung pada di mana dan kapan dia digunakan.
Ketika digunakan pada sesuatu yang bisa diurai, dia bertindak sebagai “pemecah/spread” menjadi elemen individu:
Penggunaan umum lainnya dari ...
adalah menyatukan nilai-nilai menjadi array. Di sini dia bertugas sebagai operator “rest”.
5. Ekstensi Objek Literal
ES6 memungkinkan pendeklarasian objek dengan syntax tulis cepat untuk inisialisasi properti dari variabel dan mendefinisikan fungsi method. Juga memungkinkan kalkulasi untuk penamaan properti.
6. Literal Octal dan Binary
ES6 sekarang mendukung literal oktal dan binari. Awali angka dengan 0o
atau 0O
akan mengkonversi nilainya menjadi oktal. Lihat kode di bawah:
7. Destructur Array dan Object
Destructur membantu menghilangkan kebutuhan variabel sementara ketika bekerja dengan objek dan array.
8. super di Objek
ES6 memungkinkan menggunakan method super
di objek dengan prototipe. Ini adalah contoh sederhananya:
9. Templet Literal and Pembatas
ES6 memperkenalkan cara lebih mudah menambahkan interpolasi yang dievaluasi otomatis.
${ ... }
digunakan untuk render variabel.`
Backtick digunakan untuk pemisah.
10. for…of vs for…in
for...of
mengurai nilai objek yang bisa diurai, seperti array.
for...in
mengurai properti dari objek.
11. Map dan WeakMap
ES6 memperkenalkan data struktur baru bernama Map
dan WeakMap
. Kita sebenarnya menggunakan map di JavaScript selama ini. Faktanya semua objek bisa dianggap adalah Map
.
Sebuah objek terdiri dari key ( selalu string ) dan nilai, sedangkan di Map
, semua nilai (objek maupun nilai primitif) bisa digunakan sebagai key atau nilai. Coba lihat kode di bawah:
WeakMap
WeakMap
adalah Map
yang mana key nya direferensikan dengan lemah, yang tidak menghalangi key nya dari garbage-collected. Maksutnya Anda tidak perlu khawatir tentang memory leaks.
Satu lagi yang perlu diketahui di sini, di WeakMap
sebagai kebalikan dari Map
semua key harus objek.
WeakMap
hanya punya empat method delete(key)
, has(key)
, get(key)
dan set(key, value)
.
12. Set dan WeakSet
objek Set
adalah koleksi nilai unik. Nilai duplikat tidak dianggap, karena semua anggota koleksi harus unik. Nilainya bisa tipe primitif atau referensi objek.
Anda bisa mengurainya sesuai dengan urutan ditambahkan nilainya dengan method forEach
atau pengulangan for...of
.
Set juga memiliki method delete()
dan clear()
.
WeakSet
Hampir sama dengan WeakMap
, objek WeakSet
memungkinkan Anda menyimpan objek di koleksi dengan referensi lemah. Sebuah objek di WeakSet
terjadi hanya sekali; hal ini unik di koleksi WeakSet
.
13. Class di ES6
ES6 memperkenalkan syntax class baru. Satu hal yang perlu diketahui di sini adalah class ES6 bukan model object-oriented inheritance baru. Ini hanya membuat syntax yang lebih baik dari inheritance berdasarkan protoype JavaScript.
Cara tepat melihat class di ES6 adalah syntax baru untuk bekerja dengan prototype dan fungsi constructor yang sudah sering kita gunakan di ES5.
Fungsi yang didefinisikan dengan keyword static
mengimplementasikan fungsi static/class di dalam class.
extends
dan super
di class
Lihat kode di bawah:
extends
memungkinkan child class untuk inherit dari parent class di ES6. Sangat penting bahwa konstruktor pembawa harus memanggil super()
.
Selain itu, Anda juga bisa memanggil method dari parent class dengan menggunakan super.parentMethodName()
.
Lebih lengkap tentang class di sini
Beberapa hal perlu diingat:
Pendeklarasian class tidak ditarik. Anda perlu mendeklarasikan class untuk mengaksesnya, atau error ReferenceError akan terjadi. Tidak perlu menggunakan keyword function
ketika mendefinisikan fungsi di dalam class.
14. Symbol
Symbol
adalah data tipe unik dan kekal yang diperkenalkan di ES6. Tujuan dibuatnya symbol adalah untuk membuat identifier unik tapi Anda tidak pernah bisa mengakses identifiernya.
Inilah bagaimana cara membaut symbol:
Catatan bahwa Anda tidak bisa menggunakan new dengan Symbol(...)
.
Jika Symbol
digunakan sebagai property suatu objek, datanya disimpan dengan cara yang spesial yang mana propertinya tidak muncul dengan pencacahan properti objek biasa.
Untuk mendapatkan properti symbol objek, gunakan Object.getOwnPropertySymbols(o)
15. Iterasi
Iterator mengakses individu dari koleksi satu dalam satu waktu, sementara menyimpan informasi posisi dimana dia sekarang. Ada method next()
yang mengembalikan individu selanjutnya dalam urutan. Method ini mengembalikan objek dengan dua properti: done
dan value
.
ES6 memiliki Symbol.iterator
yang dikhususkan untuk iterator untuk objek. Tiapkali objek perlu diuraikan (seperti di awal pengulangan for..of
), method @@iterator yang dipanggil tanpa argument, dan iterator yang dikembalikanlah yang digunakan untuk nilai yang akan diuraikan.
Coba lihat sebuah array, yang adalah terurai, dan iterator bisa mengambil nilainya:
Catatan bahwan Anda bisa membuat iterator buatan dengan mendefinisikan obj[Symbol.iterator]()
dengan definisi objek.
16. Generator
Fungsi generator adalah fitur baru di ES6 yang memungkinkan fungsi menggenerasi beberapa nilai dengan mengembalikan sebuah objek yang bisa diuraikan untuk mengambil nilai dari fungsi itu sendiri satu nilai dalam satu waktu.
Fungsi generator mengembalikan sebuah iterable object ketika dipanggil. Ditulis dengan syntax baru *
sama seperti keyword yield
yang baru diperkenalkan di ES6.
Tiap kali yield di panggil, nilai dari penghasilan menjadi nilai selanjutnya di urutan.
Juga, catatan bahwa generator mengkalkulasi nilainya berdasarkan permintaan, yang memungkinkan representasi urutan yang efisin pada perhitungan yang sibuk, atau bahkan urutan tak terbatas.
17. Promise
ES6 memiliki dukungan natif untuk promise. promise adalah objek yang menunggu operasi asynchronous sampai selesai, dan ketika operasi itu selesai, promise akan memenuhi permintaan atau menolaknya.
Cara membuat promise adalah dengan menggunakan constructor new Promise()
yang menerima handler yang akan diberikan dua fungsi sebagai parameter fungsi. Parameter pertama (biasanya disebut resolve) adalah fungsi untuk dipanggil ketika siap; dan handler kedua (biasanya disebut reject) adalah fungsi yang untuk menolak Promise jika dia tidak bisa menghasilkan nilai yang diharapkan.
Setiap Promise punya method dengan nama then
yang menyimpan callback
. Callback pertama dipanggil jika promise berhasil ( resolved ), sementara yang kedua jika promise direject.
Nilai yang dikembalikan dari callback then
akan dikirimkan ke callback then
selanjutnya.
Ketika mengembalikan promise, nilai yang resolved dari promise akan diteruskan ke callback selanjutnya dengan rantai yang efektif secara bersamaan. Ini adalah tehnik untuk menghindari “callback hell”.