Kodealgo

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.

TipeHasil
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