
Operator typeof dan instanceof keduanya digunakan untuk menentukan tipe data, namun skenario penggunaannya berbeda, dan beberapa detail memerlukan perhatian khusus. Yuk cari tahu selanjutnya, kuasai betul poin pengetahuan ini, dan jangan takut lagi dengan pertanyaan pewawancara.
typeof operator unary yang ditempatkan di depan operan, yang bisa bertipe apa saja. Ia mengembalikan string yang menjelaskan tipe operan. Silakan lihat kastanye:
const type = typeof 'Long Live China'; // string
ketik 666; //nomor
tipe benar; // boolean
tipe tidak terdefinisi; // tidak terdefinisi
typeof Simbol(); // simbol
ketik 1n; // bigint
typeof() => {}; // fungsi
tipe []; // objek
tipe {}; // objek
typeof String baru('xxx'); // objek
typeof null; // objek Seperti yang dapat dilihat dari contoh di atas, typeof hanya dapat secara akurat menentukan tipe data dasar dan fungsi (fungsi sebenarnya adalah objek dan bukan milik tipe data lain, tetapi mereka juga dapat dibedakan menggunakan typeof) dan tidak bisa ditentukan secara akurat. Tipe data referensi keluar (semua objek kembalian).
Satu hal yang perlu diperhatikan adalah pemanggilan typeof null akan mengembalikan object . Hal ini karena nilai khusus null dianggap sebagai referensi ke objek null (juga disebut penunjuk objek null).
Jika Anda ingin menentukan tipe data referensi secara akurat, Anda dapat menggunakan operator instanceof .
Operator instanceof ditempatkan setelah operan dan sebelum objek tertentu. Ia mengembalikan nilai Boolean yang menunjukkan apakah operan merupakan turunan dari objek yang diberikan:
const result = [] instanceof Array;
const Orang = fungsi() {};
const p = Orang baru();
p contoh Orang; // benar
pesan const = String baru('xxx');
pesan instanceof String; // sebenarnya
typeof akan mengembalikan tipe dasar operan, instanceof mengembalikan nilai Boolean
instanceof dapat secara akurat menentukan tipe data referensi, tetapi tidak dapat menentukan
tipe data dasar dengan benar meskipun dapat menentukan tipe data dasar ( kecuali null) , tetapi tidak mungkin untuk menentukan tipe data referensi (kecuali fungsi)
typeof maupun instanceof memiliki kelemahan tertentu dan tidak dapat memenuhi kebutuhan semua skenario. Jika Anda perlu mendeteksi tipe data secara universal, Anda bisa menggunakan metode Object.prototype.toString.call() :
Object.prototype.toString.call({}); // "[object Object]"
Objek.prototipe.toString.call([]); // "[Array objek]"
Objek.prototipe.toString.call(666); // "[Nomor objek]"
Object.prototype.toString.call('xxx'); // "[object String]" Perhatikan bahwa metode ini mengembalikan string dalam format "[object Object]" .
Agar lebih mudah digunakan, kita dapat merangkum metode ini:
function getType(value) {
biarkan tipe = tipe nilai;
if (type !== 'object') {// Jika ini adalah tipe data dasar, kembalikan secara langsung tipe pengembalian;
}
// Jika itu adalah tipe data referensi, penilaian lebih lanjut dibuat, dan hasil pengembalian reguler adalah return Object.prototype.toString.call(value).replace(/^[object (S+)]$/, ' $1');
}
getType(123); // nomor
getType('xxx'); // string
getType(() => {}); // fungsi
getType([]); // Array
getType({}); // Objek
getType(nol); // Batal