typeof JavaScript
Saat membuat aplikasi terkadang kita ingin mengetahui tipe data dari sebuah nilai atau variabel yang diikat ke nilai tertentu untuk menentukan struktur logika, disinilah operator typeof
dapat membantu kita.
Apa Itu typeof
?
typeof
adalah operator JavaScript yang mengembalikan string yang menunjukkan tipe data dari operan.
Sintaks
typeof operand;
Parameter
operand
: ekspresi yang mewakiliki objek atau tipe data primitif yang ingin diperiksa tipe datanya.
Contoh
const str = 'hello';
const typeStr = typeof str;
console.log(typeStr); // string
// atau
console.log(typeof 2); // number
Tabel berikut merangkum nilai kembalian dari operator typeof
.
Tipe | Hasil |
---|---|
Undefined | "undefined" |
Null | "object" |
Boolean | "boolean" |
Number | "number" |
BigInt | "bigint" |
String | "string" |
Symbol | "symbol" |
Function | "function" |
Objek lainnya | "object" |
Mari kita buktikan satu per satu.
typeof undefined; // undefined
typeof null; // object
typeof true; // boolean
typeof 1; // number
typeof NaN; // number
typeof 1n; // bigint
typeof 'hello'; // string
typeof Symbol('blabla'); // symbol
typeof function () {}; // function
typeof { name: 'ucup' }; // object
typeof [1, 2, 3]; // object
typeof new String('blabla'); // object
typeof new Boolean(true); // object
typeof new Number(1); // object
typeof new Function(); // function
Yang perlu diperhatikan:
- NaN adalah angka.
- Array adalah objek.
- Date adalah objek.
- null adalah objek.
- Undefined adalah undefined.
Kita tidak dapat menggunakan operator typeof
untuk menentukan apakah sebuah objek adalah Array atau Date.
Tipe Data Primitif
Operator typeof
dapat mengembalikan salah satu tipe primitif:
string
number
bigint
boolean
symbol
undefined
Contoh
typeof 'ucup'; //string
typeof 2; // number
typeof 2n; // bigint
typeof true; // boolean
typeof Symbol('hello'); // symbol
typeof undefined; // undefined
Tipe Data Non-primitif
Operator typeof
dapat mengembalikan salah satu dari dua tipe data non-primitif:
function
object
Operator typeof
akan mengembalikan "object" untuk objek, array, null, map, set dan lainnya, khusus untuk fungsi mengembalikan function
.
Contoh
typeof { name: 'ucup' }; // object
typeof [1, 2, 3]; // object
typeof null; // object
typeof new Map([['name', 'ucup']]); // object
typeof new Set([1, 2]); // object
typeof function myFn() {}; // function
Operator new
dengan typeof
Sebagian besar tipe data non-primitif dapat dibuat menggunakan fungi konstruktor.
Misalnya string, alih-alih "hello world"
kita bisa membuatnya menggunakan fungsi konstruktor new String("hello world")
(tidak disarankan kecuali ada alasan tertentu).
Jika tipe primitif dibuat menggunakan fungsi konstruktor dengan kata kunci new
, itu berarti kita membuat instansiasi dari objek tipe, ketika dicek menggunakan typeof
tipenya akan menjadi object
kecuali function
.
Tapi jika dibuat tanpa kata kunci new
misalnya String("hello")
tipenya akan tetap "string"
, ini biasanya digunakan untuk mengkonversi tipe.
// dengan "new"
typeof new String('hello'); // object
typeof new Number(100); // object
typeof new Boolean(true); // object
typeof new Function(); // function
// tanpa "new"
typeof String('hello'); // string
typeof String(100); // string
typeof Number(100); // number
typeof Number('100'); // number
Mengapa typeof null
adalah "object"
?
typeof null; // object - mengapa bukan null ?
null
adalah tipe data primitif yang seharusnya menggambarkan sesuatu yang tidak ada, tapi mengapa typeof null
adalah 'object'
bukan 'null'
. Ini adalah desain bahasa yang sudah ada sejak awal, anggap saja ini sebagai bug.
Pernah ada yang mengusulkan perbaikan masalah ini agar null === 'null'
, tapi ditolak karena merusak banyak situs.
Menurut spesifikasi ECMAScript, null
adalah:
Nilai primitif yang mewakili ketidakhadiran yang disengaja dari nilai objek apa pun.
Perbedaan null
dan undefined
undefined
dan null
sama nilainya, tetapi beda tipenya.
typeof undefined; // undefined
typeof null; // object
null == undefined; // true
null === undefined; // false