Bab ini menunjukkan beberapa kesalahan JavaScript umum.
Sengaja Menggunakan Operator Assignment
Program JavaScript dapat menghasilkan hasil yang tidak diharapkan jika programmer sengaja menggunakan operator penugasan (=) , bukan operator perbandingan (==) dalam sebuah pernyataan jika.
Ini if pernyataan mengembalikan false (seperti yang diharapkan) karena x tidak sama dengan 10:
var x = 0;
if (x == 10)
Cobalah sendiri " Ini if pernyataan mengembalikan true (mungkin tidak diharapkan), karena 10 adalah benar:
var x = 0;
if (x = 10)
Cobalah sendiri " Ini if pernyataan mengembalikan false (mungkin tidak diharapkan), karena 0 adalah palsu:
var x = 0;
if (x = 0)
Cobalah sendiri " Tugas selalu mengembalikan nilai tugas.
Mengharapkan Perbandingan Longgar
Dibandingkan reguler, tipe data tidak masalah. Pernyataan ini jika kembali true :
var x = 10;
var y = "10";
if (x == y)
Cobalah sendiri " Sebagai perbandingan yang ketat, tipe data itu penting. Pernyataan ini jika mengembalikan false :
var x = 10;
var y = "10";
if (x === y)
Cobalah sendiri " Ini adalah kesalahan umum untuk melupakan bahwa laporan beralih menggunakan perbandingan yang ketat:
saklar kasus ini akan menampilkan peringatan:
var x = 10;
switch(x) {
case 10: alert("Hello");
}
Cobalah sendiri " saklar hal ini tidak akan menampilkan peringatan:
var x = 10;
switch(x) {
case "10": alert("Hello");
}
Cobalah sendiri " Membingungkan Penambahan & Concatenation
Selain adalah tentang menambahkan angka.
Rangkaian adalah tentang menambahkan string.
Dalam JavaScript kedua operasi menggunakan operator + yang sama.
Karena itu, menambahkan nomor sebagai nomor akan menghasilkan hasil yang berbeda dari menambahkan nomor sebagai string:
var x = 10 + 5; //
the result in x is 15
var x = 10 + "5";
// the result in x is "105"
Cobalah sendiri " Ketika menambahkan dua variabel, bisa sulit untuk mengantisipasi hasilnya:
var x = 10;
var y = 5;
var z = x + y;
// the result in z is 15
var x = 10;
var y = "5";
var z =
x + y;
// the result in z is "105"
Cobalah sendiri " kesalahpahaman Mengapung
Semua angka dalam JavaScript disimpan sebagai 64-bit nomor floating point (Mengapung).
Semua bahasa pemrograman, termasuk JavaScript, mengalami kesulitan dengan tepat nilai floating point:
var x = 0.1;
var y = 0.2;
var z = x + y
// the result in z will not be 0.3
if (z == 0.3)
// this if test will fail
Cobalah sendiri " Untuk mengatasi masalah di atas, hal ini membantu untuk memperbanyak dan membagi:
Melanggar String JavaScript
JavaScript akan memungkinkan Anda untuk memecahkan sebuah pernyataan menjadi dua baris:
Tapi, melanggar pernyataan di tengah string tidak akan bekerja:
Anda harus menggunakan "backslash" jika Anda harus menghancurkan pernyataan dalam sebuah string:
lupa tempat menyimpan Titik koma
Karena titik koma salah tempat, blok kode ini akan mengeksekusi terlepas dari nilai x:
if (x == 19);
{
// code block
}
Cobalah sendiri " Melanggar Pernyataan Kembali
Ini adalah perilaku default JavaScript untuk menutup pernyataan secara otomatis pada akhir baris.
Karena itu, dua contoh ini akan mengembalikan hasil yang sama:
JavaScript juga akan memungkinkan Anda untuk memecahkan sebuah pernyataan menjadi dua baris.
Karena itu, contoh 3 juga akan mengembalikan hasil yang sama:
Tapi, apa yang akan terjadi jika Anda melanggar pernyataan kembali dalam dua baris seperti ini:
fungsi akan kembali terdefinisi!
Mengapa? Karena JavaScript berpikir Anda berarti:
Penjelasan
Jika pernyataan tidak lengkap seperti:
var
JavaScript akan mencoba untuk menyelesaikan pernyataan dengan membaca baris berikutnya:
power = 10;
Tapi karena pernyataan ini selesai:
return
JavaScript secara otomatis akan menutup seperti ini:
return;
Hal ini terjadi karena penutupan (berakhir) pernyataan dengan titik koma adalah opsional dalam JavaScript.
JavaScript akan menutup pernyataan kembali pada akhir baris, karena merupakan pernyataan lengkap.
Tidak pernah melanggar pernyataan kembali.
Mengakses Array dengan Indeks Dinamakan
Banyak bahasa pemrograman mendukung array dengan nama indeks.
Array dengan nama indeks yang disebut array asosiatif (atau hash).
JavaScript tidak mendukung array dengan nama indeks.
Dalam JavaScript, array menggunakan indeks bernomor:
Contoh
var person = [];
person[0] = "John";
person[1] = "Doe";
person[2] = 46;
var x = person.length;
// person.length will return 3
var y = person[0];
// person[0] will return "John"
Cobalah sendiri " Dalam JavaScript, objek menggunakan bernama indeks.
Jika Anda menggunakan indeks bernama, ketika mengakses sebuah array, JavaScript akan mendefinisikan array ke objek standar.
Setelah redefinisi otomatis, metode array dan properti akan menghasilkan hasil yang tidak terdefinisi atau salah:
Contoh:
var person = [];
person["firstName"] = "John";
person["lastName"] = "Doe";
person["age"] = 46;
var x = person.length; // person.length will
return 0
var y = person[0];
// person[0] will return undefined
Cobalah sendiri " Mengakhiri Definisi Array dengan Comma
Salah:
points = [40, 100, 1, 5, 25, 10,];
Beberapa JSON dan JavaScript engine akan gagal, atau bertingkah aneh.
Benar:
points = [40, 100, 1, 5, 25, 10];
Mengakhiri Definisi Object dengan Comma
Salah:
person = {firstName:"John", lastName:"Doe", age:46,}
Beberapa JSON dan JavaScript engine akan gagal, atau bertingkah aneh.
Benar:
person = {firstName:"John", lastName:"Doe", age:46}
Terdefinisi adalah Tidak Null
Dengan JavaScript, null untuk objek, tidak terdefinisi adalah untuk variabel, properti, dan metode.
Untuk menjadi nol, sebuah objek harus didefinisikan, jika tidak maka akan terdefinisi.
Jika Anda ingin menguji apakah suatu objek ada, ini akan melemparkan kesalahan jika objek tidak terdefinisi:
Salah:
if (myObj !== null && typeof myObj !== "undefined")
Karena itu, Anda harus menguji typeof () pertama:
Benar:
if (typeof myObj !== "undefined" && myObj !== null)
Mengharapkan Blok Tingkat Scope
JavaScript tidak membuat lingkup baru untuk setiap blok kode.
Memang benar dalam banyak bahasa pemrograman, tetapi tidak benar dalam JavaScript.
Ini adalah kesalahan umum, kalangan pengembang JavaScript baru, untuk percaya bahwa kode ini mengembalikan terdefinisi: