JavaScript memeriksa null vs. undefined dan perbedaan antara == dan ===
Bagaimana cara saya memeriksa sebuah variabel jika itu
nullatauundefineddan apa perbedaan antaranulldanundefined?Apa perbedaan antara
==dan===(sulit mencari di Google untuk "===")?
Jawaban #1
Bagaimana cara memeriksa suatu variabel jika itu
nullatauundefined...
Apakah variabel null:
if (a === null)
// or
if (a == null) // but see note below
...tetapi catat bahwa yang terakhir juga akan berlaku jika a adalah undefined.
Apakah itu undefined:
if (typeof a === "undefined")
// or
if (a === undefined)
// or
if (a == undefined) // but see note below
...tetapi sekali lagi, perhatikan bahwa yang terakhir itu samar; itu juga akan benar jika a adalah null.
Sekarang, meskipun demikian, cara biasanya untuk memeriksa hal-hal tersebut adalah dengan menggunakan fakta bahwa mereka falsey:
if (!a) {
// `a` is falsey, which includes `undefined` and `null`
// (and `""`, and `0`, and `NaN`, and [of course] `false`)
}
Ini didefinisikan oleh ToBoolean dalam spesifikasi.
...dan apa perbedaan antara
nulldanundefined?
Keduanya adalah nilai yang biasanya digunakan untuk menunjukkan ketiadaan sesuatu. undefined adalah yang lebih umum, digunakan sebagai nilai default dari variabel hingga variabel tersebut diberi nilai lain, sebagai nilai argumen fungsi yang tidak diberikan ketika fungsi dipanggil, dan sebagai nilai yang Anda dapatkan ketika menanyakan sebuah objek tentang properti yang tidak dimilikinya. Namun, ini juga bisa secara eksplisit digunakan dalam semua situasi tersebut. (Ada perbedaan antara sebuah objek yang tidak memiliki properti, dan memiliki properti dengan nilai undefined; ada perbedaan antara memanggil fungsi dengan nilai undefined untuk sebuah argumen, dan meninggalkan argumen itu sepenuhnya.)
null sedikit lebih spesifik daripada undefined: Ini adalah referensi objek kosong. JavaScript memang bertipe lemah, tentu saja, tetapi tidak semua hal yang berinteraksi dengan JavaScript bertipe lemah. Jika sebuah API seperti DOM di browser membutuhkan referensi objek yang kosong, kita menggunakan null, bukan undefined. Dan serupa, operasi DOM getElementById mengembalikan referensi objek — baik yang valid (jika menemukannya elemen DOM), atau null (jika tidak menemukannya).
Menariknya (atau tidak), mereka adalah tipe mereka sendiri. Yang artinya, null adalah satu-satunya nilai dalam tipe Null, dan undefined adalah satu-satunya nilai dalam tipe Undefined.
Apa perbedaan antara "==" dan "==="
Satu-satunya perbedaan antara keduanya adalah bahwa == akan melakukan koersi tipe untuk mencoba menyamakan nilai, sedangkan === tidak akan. Jadi, misalnya "1" == 1 adalah true, karena "1" dikoersi menjadi 1. Tetapi "1" === 1 adalah false, karena tipenya tidak cocok. ("1" !== 1 adalah true.) Langkah pertama (sebenarnya) dari === adalah "Apakah tipe operand sama?" dan jika jawabannya "tidak", hasilnya adalah false. Jika tipenya sama, maka ia melakukan persis seperti yang dilakukan ==.
Koersi tipe menggunakan aturan yang cukup kompleks dan dapat menghasilkan hasil yang mengejutkan (misalnya, "" == 0 adalah benar).
Lebih lanjut dalam spesifikasi:
- Perbandingan Kesetaraan Abstrak (
==, juga disebut kesetaraan "longgar") - Perbandingan Kesetaraan Ketat (
===)
Jawaban #2
Perbedaannya halus.
Dalam JavaScript, sebuah variabel undefined adalah variabel yang belum pernah dideklarasikan, atau belum pernah diberi nilai. Misalnya, jika Anda mendeklarasikan var a;, maka a akan menjadi undefined, karena variabel tersebut belum pernah diberi nilai.
Tapi jika Anda kemudian menetapkan a=null; maka a sekarang akan menjadi null. Dalam JavaScript null adalah sebuah objek (coba typeof null di konsol JavaScript jika Anda tidak percaya), yang berarti bahwa null adalah sebuah nilai (bahkan undefined pun adalah sebuah nilai).
Contoh :
var a;
typeof a; # => "undefined"
a = null;
typeof null; # => "object"
Ini bisa berguna dalam argumen fungsi. Anda mungkin ingin memiliki nilai default, tetapi anggap null dapat diterima. Dalam hal ini, Anda bisa melakukan:
function doSomething(first, second, optional) {
if (typeof optional === "undefined") {
optional = "three";
}
// do something
}
Jika Anda menghilangkan parameter optional doSomething(1, 2) makaoptional akan menjadi string "three" tetapi jika Anda melewati doSomething(1, 2, null) maka optional akan menjadi null.
Adapun pembanding sama dengan == dan sama dengan secara ketat ===, yang pertama adalah tipe lemah, sedangkan sama dengan secara ketat juga memeriksa tipe nilai. Itu berarti bahwa 0 == "0" akan mengembalikan true; sedangkan 0 === "0" akan mengembalikan false, karena angka bukanlah string.
Anda dapat menggunakan operator-operator tersebut untuk memeriksa antara undefined dan null. Sebagai contoh:
null === null # => true
undefined === undefined # => true
undefined === null # => false
undefined == null # => true
Kasus terakhir menarik, karena memungkinkan Anda untuk memeriksa apakah sebuah variabel tidak terdefinisi atau null dan bukan yang lain:
function test(val) {
return val == null;
}
test(null); # => true
test(undefined); # => true
Jawaban #3
Spesifikasi adalah tempat untuk mendapatkan jawaban lengkap atas pertanyaan-pertanyaan ini. Berikut adalah ringkasannya:
Untuk sebuah variabel
x, Anda dapat:- periksa apakah itu
nulldengan perbandingan langsung menggunakan===. Contoh:x === null
- periksa apakah itu
- periksa apakah itu
undefineddengan salah satu dari dua metode dasar: perbandingan langsung denganundefinedatautypeof. Untuk berbagai alasan, saya lebih sukatypeof x === "undefined". - periksa apakah itu salah satu dari
nulldanundefineddengan menggunakan==dan mengandalkan aturan koersi tipe yang agak kuno yang berartix == nullmelakukan persis apa yang Anda inginkan. - Perbedaan dasar antara
==dan===adalah jika operand memiliki tipe yang berbeda,===akan selalu menghasilkanfalsesementara==akan mengubah satu atau kedua operand menjadi tipe yang sama menggunakan aturan yang menghasilkan beberapa perilaku yang sedikit tidak intuitif. Jika operand memiliki tipe yang sama (misalnya keduanya adalah string, seperti pada perbandingantypeofdi atas),==dan===akan berperilaku persis sama.
Baca lebih lanjut:
- Kebenaran, Kesetaraan, dan JavaScript oleh Angus Croll
- Memahami Coercion JavaScript oleh Andrea Giammarchi
- comp.lang.javascript FAQ: Konversi Tipe JavaScript
Jawaban #4
Bagaimana saya memeriksa sebuah variabel jika itu null atau undefined
hanya periksa apakah sebuah variabel memiliki nilai yang valid seperti ini :
if(variable)
ini akan mengembalikan true jika variabel tidak mengandung :
- null
- tidak terdefinisi
- salah
- "" (string kosong)
- NaN
