Pengenalan JavaScript dan DOM
Pengenalan JavaScript dan DOM
Pada akhir sub-modul ini kita akan menerapkan apa yang sudah kita pelajari
pada project Web Kalkulator sehingga kalkulator dapat berfungsi sesuai yang
kita harapkan.
Lalu pada tahun 2015 ECMAScript 6 rilis dengan membawa perubahan yang
cukup besar termasuk ide - ide yang sudah direncanakan untuk versi 4. Mulai
dari itu tiap tahun JavaScript melakukan update bersifat minor.
Atribut HTML
Untuk menuliskan JavaScript menggunakan atribut, kita bisa menerapkannya
pada atribut event seperti “onclick”, sehingga JavaScript akan dieksekusi
ketika elemen tersebut ditekan oleh kursor. Contohnya sebagai berikut:
Embedded Script
JavaScript juga dapat dituliskan dengan menanamnya (embedding) pada
berkas HTML dengan menggunakan elemen <script>.
1. <script>
3. </script>
Elemen <script> dapat diletakan di dalam elemen <head> atau <body>. Akan
tetapi jika kita menerapkan banyak script pada elemen <head> proses
memuat halaman akan menjadi lambat, karena HTML akan membaca kode
dari atas ke bawah.
External Script
Metode lainnya yaitu dengan menggunakan berkas external yang
berekstensi .js. Di dalam berkas tersebutlah seluruh JavaScript dituliskan.
Keuntungan menggunakan metode ini adalah script dapat diterapkan pada
berbagai berkas HTML tanpa menuliskan ulang scriptnya (keuntungan yang
sama juga ketika kita menggunakan external css).
1. <script src="[Link]"></script>
Sama seperti Embedded Script, kita bisa tuliskan tag <script> tersebut di
dalam elemen <head>. Namun, direkomendasikan untuk disimpan di dalam
elemen <body> sebelum tag penutup </body>.
Teknik inilah yang akan kita gunakan dalam penerapan JavaScript pada
project kalkulator.
Buka project kalkulator yang sudah kita buat. Di dalam folder assets, buat
berkas baru dengan memberikan nama “[Link]”. Ingat berkas ini harus
diakhiri dengan ekstensi .js. Ekstensi tersebut menandakan bahwa berkas ini
merupakan berkas JavaScript.
Setelah membuat berkas tersebut maka struktur dari proyek kalkulator akan
tampak seperti berikut:
Buka berkas [Link] dan tuliskan kode JavaScript berikut:
Website");
Jangan khawatir jika Anda belum memahami maksud dari kode tersebut,
nanti akan dijelaskan apa yang sudah kita tuliskan.
1. ...........
2. <script src="assets/[Link]"></script>
3. </body>
Mungkin ini akan membuat Anda bingung jika tidak memiliki dasar
pemrograman. Tak apa, yang terpenting ketika pesan ini muncul
pada console, itu menandakan kita sudah berhasil menerapkan JavaScript
pada website kita.
Dasar JavaScript
Wajar jika kita menemukan banyak buku JavaScript dengan halaman super
tebal karena memang banyak sekali bahasan seputar JavaScript ini. Tetapi
pada materi ini kita rangkum menjadi beberapa pembahasan penting yang
Anda perlu ketahui. Tujuannya agar Anda familier dengan dasar - dasar
JavaScript. Dengan memahami dasar-dasar JavaScript, nantinya diharapkan
kita dapat terus berlatih sehingga terbiasa dengan penggunaan sintaksnya.
Ketika mempelajari bahasa pemrograman apapun pertama kita harus
memahami logika yang mendasari dari penulisan script, meskipun secara
sintaksis setiap bahasa pemrograman berbeda namun secara umum
logikanya akan sama.
Maka dari itu hindari belajar dengan cara menghafal seluruh struktur kode
yang dituliskan, tapi belajarlah dengan memahami tujuan dari kode yang
dituliskan. Dengan memahami kode-kode yang ada dan dipadukan logika
maka kita akan mudah dalam menghadapi suatu masalah - masalah yang
ada ketika mengembangkan suatu aplikasi/web.
Pada akhir materi ini, kita akan mengenal tentang variabel, array, operator
komparasi, if else statement dan masih banyak lagi. Sudah siap belajar?
Statement
Sebuah script dibangun dari serangkaian statement. Statement merupakan
sebuah perintah yang bertujuan untuk memberitahu apa yang harus
dilakukan browser. Contohnya kode berikut merupakan statement yang
menyatakan bahwa browser harus menampilkan pesan (alert) dengan
kalimat “Terima kasih”.
1. alert("Terimakasih.");
Pada akhir kode terdapat tanda titik koma (;) yang digunakan untuk
menandai akhir dari sebuah statement. Meskipun sebenarnya pada
JavaScript kita dapat menghiraukan penulisan titik koma (;) pada
akhir statement, tetapi dalam best practice nya kita biasakan
akhiri statement dengan titik koma (;).
Comment
Pada JavaScript juga terdapat fitur komentar. Seluruh teks yang dituliskan
pada tanda komentar akan diabaikan (tidak dianggap ada) atau tidak akan
dieksekusi. Dalam komentar ini kita bisa menuliskan teks untuk
mengingatkan atau menjelaskan kode yang kita tuliskan. Hal ini bisa saja
berguna jika kode yang kita tuliskan akan diubah oleh orang lain. Tapi ingat,
jangan terlalu berupaya dalam menuliskan komentar yang sebenarnya tidak
perlu dituliskan.
2.
3. // alert("Thank you")
Sedangkan untuk menggunakan komentar lebih dari satu baris (multiple lines
comment) kita bisa gunakan tanda /* sebagai pembuka komentar dan tanda
*/ sebagai penutup komentar. Teks apapun yang berada di antara tanda
tersebut akan dijadikan komentar dan tidak akan dieksekusi.
1. /* This is a comment with more than one line
4. */
Variabel
Ketika mendengar variabel apakah Anda teringat tentang pelajaran
matematika? Yups, variabel di sini memiliki konsep yang sama. Variabel
umumnya digunakan untuk menyimpan informasi atau nilai yang akan
dikelola di dalam sebuah program.
[Link]
var firstName = "Harry";
[Link](firstName);
firstName = "Ron";
[Link](firstName);
/* output:
Harry
Ron
*/
Input Reset
Jalankan
[Link]
x = 100;
var x;
[Link](x);
/* output: 100 */
Input Reset
Jalankan
Ini dikarenakan proses hoisting, sebenarnya di belakang layar deklarasi
variabel x diangkat ke atas sehingga kode yang tampak seperti ini:
[Link]
1
var x;
x = 100;
[Link](x);
/* output: 100 */
Input Reset
Jalankan
Hoisting menjadi kontroversial karena tidak sedikit developer yang dibuat
bingung akan hal ini. Masalah ini sudah terselesaikan jika kita
menggunakan let dalam mendeklarasikan variabel.
[Link]
y = 100;
let y;
[Link](y);
Input Reset
Jalankan
Kemudian const digunakan untuk mendeklarasikan sebuah variabel yang
sifatnya immutable atau tidak perlu diubah nilainya. Jika kita menginisialisasi
kembali nilai variabel yang menggunakan const, maka akan mendapati eror
“TypeError: Assignment to constant variable.”
[Link]
const z = 100;
[Link](z);
z = 200;
[Link](z)
Dengan begitu sebaiknya kita gunakan let atau const ketika mendeklarasikan
variabel daripada menggunakan var.
Tipe Data
Nilai yang kita tetapkan pada variabel pasti memiliki tipe data. Tipe data
merupakan pengklasifikasian data berdasarkan jenis data tersebut. Pada
JavaScript terdapat beberapa tipe data sebagai berikut:
Undefined
Tipe data ini terbentuk ketika sebuah variabel tidak memiliki nilai, dalam arti
lain ketika kita mendeklarasikan variabel tanpa menginisialisasikan nilainya,
maka variabel tersebut menjadi undefined. Contoh:
let x;
[Link](typeof(x));
/* output: undefined */
Pada contoh kode di atas, kita mendeklarasikan variabel x, tetapi kita tidak
menginisialisasikan dengan nilai apapun. Ketika kita memastikan tipe data
dengan menggunakan fungsi typeof() maka menghasilkan output undefined.
Fungsi typeof() digunakan untuk memastikan tipe data pada variabel dengan
mengembalikan tipe data tersebut dalam bentuk teks
Numbers
Nilai dari tipe data number adalah angka. JavaScript variabel bertipe data
number dituliskan seperti ini:
1. let x = 10;
Jika angka tersebut merupakan sebuah bilangan desimal, maka kita bisa
gunakan tanda titik pada pecahan bilangannya.
let x = 10;
[Link](typeof(x))
/* output: number */
let y = 17.25;
[Link](typeof(y))
/* output: number */
Pada tipe data number kita juga dapat melakukan perhitungan aritmatika
seperti penambahan, pengurangan, perkalian, dll. Berikut operator yang
dapat kita gunakan dalam melakukan perhitungan aritmatika pada tipe
data number:
Operator Fungsi Contoh
+ Penambahan 10 + 10 = 20
- Pengurangan 15 - 7 = 8
/ Pembagian 21 / 7 = 3
* Perkalian 9 * 9 = 81
% Sisa hasil bagi 5%2=1
let a = 12;
let b = 9;
[Link](a + b)
[Link](a - b)
[Link](a * b)
[Link](a / b)
[Link](a % b)
/* output:
21
108
1.3333333333333333
*/
Operator ini dapat dituliskan sebelum atau sesudah variabel, tetapi hal
tersebut bukan berarti sama. Berikut ketentuannya:
let postfix = 5;
[Link](postfix++);
/* output: 5 */
let prefix = 5;
[Link](++prefix);
/* output: 6 */
Strings
Tipe data selanjutnya adalah strings, String ini dasarnya adalah sebuah teks.
Pada JavaScript untuk menetapkan nilai string pada variabel, gunakan
tanda single („) atau double quote (“) di antara teksnya.
[Link](typeof(greet))
/* output: string */
Apa pun yang berada di antara tanda double quote atau single
quote merupakan sebuah string, baik itu angka, huruf maupun karakter
spesial.
Pada string juga kita dapat menggunakan operator plus (+). Operator
tersebut pada string berfungsi untuk menggabungkan dua teks yang terpisah
menjadi satu buah teks. Contohnya seperti ini:
[Link](moreGreet);
/* output: HelloHello */
Boolean
Boolean hanya dapat memiliki dua nilai, yakni true atau false. Tipe data ini
menjadi kunci utama dalam penentuan logika, kita akan memahaminya nanti
ketika pembahasan if/else statement. Untuk menetapkan nilai boolean pada
variabel kita bisa menggunakan keyword true atau false.
let x = true;
let y = false;
[Link](typeof(x))
[Link](typeof(y))
/* output:
boolean
boolean
*/
Atau kita bisa gunakan operator komparasi seperti lebih dari (>) atau kurang
dari (<). Contohnya:
const a = 10;
const b = 12;
[Link](isGreater);
[Link](isLess);
/* output:
False
Null
Yang terakhir adalah null. Serupa dengan undefined, namun null perlu
diinisialisasikan pada variabel. null biasa digunakan sebagai nilai sementara
pada variabel, tapi sebenarnya nilai tersebut “tidak ada”.
Untuk menetapkan null pada variabel, kita dapat gunakan keyword null ketika
variabel tersebut diinisialisasikan.
/* output:
Null
Meskipun terdapat beberapa tipe data dalam JavaScript, tetapi variabel pada
JavaScript memiliki sifat tipe data yang dinamis. Artinya, kita dapat
memberikan tipe data yang berubah-ubah pada satu variabel yang sama.
Contohnya:
Arrays
Array merupakan tipe data yang dapat mengelompokkan lebih dari satu nilai
dari tipe data lain dengan menempatkannya pada satu variabel. Contoh:
[Link](myArray);
/* output:
*/
Nilai - nilai yang berada pada array disusun dan diakses secara indexing.
Untuk mengakses nilai di dalam array kita gunakan tanda kurung siku [] yang
di dalamnya berupa angka yang merupakan posisi nilai yang ingin diakses.
[Link](myArray[1]);
/* output:
42.5
*/
Yang perlu kita ketahui adalah nilai index dimulai dari angka 0. Terlihat pada
contoh kode di atas, kita mengakses index ke-1 pada myArray. Nilai yang
muncul adalah nilai ke-2 dari array tersebut, yakni 42.5. Jika kita mengakses
nilai array lebih dari index-nya maka hasilnya akan undefined. Index terakhir
array selalu jumlah nilai array - 1.
Objek
Objek serupa dengan array yang dapat menampung banyak nilai dengan tipe
data yang beragam. Untuk mengelola data menggunakan objek, bedanya
objek diakses tidak melalui indexing, melainkan menggunakan
pendekatan key-value. Untuk mengakses nilainya kita gunakan key. Key juga
biasa disebut dengan properti.
1. let user = {
2. firstName: "Harry",
3. lastName: "Potter",
4. age: 20,
5. isMuggle: false,
7. };
Kemudian untuk mengakses nilai dari properti objek kita dapat gunakan
tanda titik diikuti dengan nama properti-nya. Contoh:
let user = {
firstName: "Harry",
lastName: "Potter",
age: 20,
isMuggle: false,
};
*/
Bahkan dalam properti objek, kita dapat menyimpan nilai objek lainnya.
Contohnya properti firstName dan lastName dapat dikelompokan kembali
dalam sebuah objek baru sebagai berikut:
1. let user = {
2. name: {
3. first: "Harry",
4. last: "Potter"
5. },
6. age: 20,
7. isMuggle: false,
9. }
let user = {
name: {
first: "Harry",
last: "Potter",
},
age: 20,
isMuggle: false,
};
/* output
*/
Banyak hal sebenarnya yang dapat diceritakan tentang dua hal ini, terutama
untuk objek. Jika Anda ingin tahu lebih dalam, Anda bisa baca
dokumentasinya pada tautan yang disediakan oleh MDN:
Array : [Link]
US/docs/Web/JavaScript/Reference/Global_Objects/Array
Objek : [Link]
US/docs/Web/JavaScript/Reference/Global_Objects/Object
Assignment Operator
Dari contoh kode yang kita gunakan sebelumnya sebenarnya kita sudah
menggunakan assignment operator. Operator ini digunakan untuk
memberikan nilai pada variabel.
Pada dasarnya operator ini adalah tanda sama dengan (=), di mana tanda ini
digunakan untuk menginisialisasi nilai pada variabel. Variabel yang akan
diberikan nilai ditempatkan pada sebelah kiri dan nilainya ditempatkan pada
sebelah kanan (nilai dapat berupa variabel lain atau nilai primitif, array, atau
objek). Di antara keduanya terdapat operator assignment.
1. x = y;
let x = 10;
let y = 5
x += y;
[Link](x);
/* output
15
*/
1. let x = 10;
2. let y = 5
3.
4. x += y; // means -> x = x + y;
5. x -= y; // means -> x = x - y;
6. x *= y; // means -> x = x * y;
7. x /= y; // means -> x = x / y;
8. x %= y; // means -> x = x % y;
Operator Komparasi
Sekarang kita sudah mengetahui bagaimana cara menyimpan nilai pada
sebuah variabel, array, ataupun objek. Nah, selanjutnya kita akan belajar
mengenai operator komparasi sebagai logika dasar dalam membandingkan
nilai pada JavaScript.
Operator Fungsi
== Membandingkan kedua nilai apakah sama. (Tidak Identik)
!= Membandingkan kedua nilai apakah tidak sama. (Tidak Identik)
=== Membandingkan kedua nilai apakah identik.
!== Membandingkan kedua nilai apakah tidak identik.
> Membandingkan dua nilai apakah nilai pertama lebih besar dari nilai kedua.
>= Membandingkan dua nilai apakah nilai pertama lebih besar atau sama dengan dari
nilai kedua.
< Membandingkan dua nilai apakah nilai pertama lebih kecil dari nilai kedua.
<= Membandingkan dua nilai apakah nilai pertama lebih kecil dari atau sama dengan
nilai kedua.
Ketika kita melakukan perbandingan antara dua nilai, JavaScript akan
mengevaluasi kedua nilai tersebut dan akan mengembalikan boolean dengan
nilai hasil perbandingan tersebut, baik false, atau true. Berikut contohnya:
let a = 10;
let b = 12;
true
false
*/
Kita sudah mengetahui bahwa setiap nilai pasti memiliki tipe data baik itu
number, string atau boolean. Contohnya sebuah string “10” dan number 10
merupakan hal yang serupa, tetapi keduanya tidak benar-benar sama.
Hal inilah yang membedakan antara sama dan identik pada JavaScript. Jika
kita ingin membandingkan hanya dari kesamaan nilainya kita bisa
gunakan == tapi jika kita ingin membandingkan dengan memperhatikan tipe
datanya kita gunakan ===.
const aNumber = 10
/* output
true
false
*/
Logical Operators
Terdapat beberapa operator lain yang dapat kita gunakan untuk menetapkan
logika yang lebih kompleks, yakni dengan logical operators. Dengan logical
operator kita dapat menggunakan kombinasi dari dua nilai boolean atau
bahkan lebih dalam menetapkan logika.
Operator Deskripsi
&& Operator dan (and), logika akan menghasilkan true apabila semua kondisi
terpenuhi (bernilai true).
|| Operator atau (or), logika akan menghasilkan true apabila ada salah satu kondisi
terpenuhi (bernilai true).
! Operator tidak (not), digunakan untuk membalikan suatu kondisi.
Berikut contoh penerapannya pada JavaScript:
let a = 10;
let b = 12;
/* AND operator */
[Link](a < 15 && b > 10); // (true && true) -> true
[Link](a > 15 && b > 10); // (false && true) -> false
/* OR operator */
/* NOT operator */
[Link](!(a < 15)); // !(true) -> false
[Link](!(a < 15 && b > 10)); // !(true && true) -> !(true) -> false
Mungkin sebagian dari kita bertanya, sebenarnya apa kegunaan dari nilai
boolean selain hanya menampilkan nilai true dan false saja? Pada
pembahasan tipe data sudah pernah disebutkan bahwa boolean merupakan
salah satu kunci dari logika pemrograman, karena boolean dapat mengontrol
aliran pada program.
If/Else Statement
Ketika mengembangkan sebuah program tentu terdapat alur atau flow proses
ketika kode dijalankan. Kita dapat mengontrol alur program ketika suatu
kondisi terjadi, misalkan jika nilai x > 5 maka program harus
melakukan statement a. Jika tidak, program akan menjalankan statement b.
Untuk melakukan hal tersebut, kita dapat menggunakan if/else statement.
Contohnya, terdapat variabel x dengan nilai 50, kemudian kita bertanya “Hai
JavaScript! Apakah x lebih dari 70?” jika kondisi tersebut benar, maka kita
dapat memerintahkan JavaScript untuk menampilkan nilainya. Jika salah, kita
perintahkan JavaScript untuk menampilkan teks “Nilai kurang dari 70”.
let x = 50;
[Link](x);
} else {
/* output
*/
Block else bersifat opsional untuk dituliskan, hal tersebut berarti kita tidak
perlu menuliskannya jika tidak kita manfaatkan. Contohnya:
[Link](greeting);
/* output
Good Morning!
*/
Pada kode di atas, nilai greeting memiliki nilai standar “Selamat Pagi!” tetapi
akan ditampilkan berbeda jika language memiliki nilai “English”, pada kasus
ini kita tidak perlu menuliskan block else.
greeting = "Bonjour!"
greeting = "Ohayogozaimasu!"
[Link](greeting);
/* output
Bonjour!
*/
Loop
Sejauh ini kita sudah mengenal array sebagai tempat untuk menyimpan
banyak data. Ada beberapa kasus dimana kita ingin memeriksa setiap item
dalam sebuah array dan melakukan sesuatu dengannya, tetapi kita tidak
ingin menuliskan seluruh daftar nilai pada array secara manual, dan
menyibukkan diri untuk melakukan hal yang berulang. Maka dari itu kita perlu
mempelajari teknik yang dapat mengatasi permasalahan tersebut, teknik ini
disebut dengan loops.
For loop
Terdapat beberapa cara dalam melakukan proses loop pada JavaScript,
namun “for” merupakan salah satu cara yang banyak digunakan. Struktur
dasar dari for tampak seperti berikut:
2. // do something
3. }
[Link](i);
/* output
0
1
*/
Mungkin kode tersebut sulit dipahami jadi mari kita bahas sedikit demi sedikit.
Yang pertama adalah for(), kita memanggil for statement di mana kita
memerintahkan JavaScript seperti ini: “Hai JavaScript! Lakukan perulangan
jika kondisi ini benar”, selanjutnya tentu kita membutuhkan sebuah kondisi
untuk dievaluasi.
Huft, cukup panjang untuk memahami for loops, mari kita kembali ke tujuan
awal, lantas bagaimana cara memeriksa item dalam array dengan
menggunakan for loop? Kita dapat melakukannya dengan seperti ini:
const myArray = ["Harry", "Ron", "Hermione", "Tom"];
[Link](myArray[i]);
/* output
Harry
Ron
Hermione
Tom
*/
For of loop
Cara lain dalam melakukan looping adalah menggunakan for..of. For
of mulai hadir pada ECMAScript 2015 (ES6). Cara ini jauh lebih sederhana
dan modern dibanding for loop biasa. Struktur dasar dari for of loop nampak
seperti ini:
1. for(arrayItem of myArray) {
2. // do something
3. }
Yups, for of tidak membutuhkan banyak statement untuk melakukan
proses looping pada array. Dengan for..of, nilai tiap array akan diinisialisasi
pada variabel baru yang kita tentukan pada tiap proses looping-nya. Jumlah
proses looping nya pun akan menyesuaikan dengan ukuran dari array.
Sederhananya seperti kita melakukan perintah “Hei JavaScript! Lakukan
perulangan pada myArray, akses tiap nilainya dan simpan pada
variabel arrayItem”. Pada proses looping kita gunakan
variabel arrayItem untuk mengakses tiap nilai dari item myArray.
[Link](arrayItem)
/* output
Harry
Ron
Hermione
Tom
*/