2 ¢ saya! Sungguh, bagian dari alasan saya melemparkan ini di sini, meskipun daftar panjang jawaban, adalah untuk memberikan all in one
solusi tipe yang lebih sedikit dan mendapatkan umpan balik di masa depan tentang bagaimana mengembangkannya untuk memasukkan lebih banyak real types
.
Dengan solusi berikut, seperti yang disebutkan di atas, saya menggabungkan beberapa solusi yang ditemukan di sini, serta memasukkan perbaikan untuk mengembalikan nilai jQuerypada objek yang didefinisikan pada jQuery jika tersedia . Saya juga menambahkan metode ke prototipe Object asli. Saya tahu itu sering kali tabu, karena bisa mengganggu ekstensi lain, tapi saya biarkan begitu user beware
. Jika Anda tidak suka cara melakukannya, cukup salin fungsi basis di mana saja Anda suka dan ganti semua variabel this
dengan parameter argumen untuk dilewatkan (seperti argumen [0]).
;(function() { // Object.realType
function realType(toLower) {
var r = typeof this;
try {
if (window.hasOwnProperty('jQuery') && this.constructor && this.constructor == jQuery) r = 'jQuery';
else r = this.constructor && this.constructor.name ? this.constructor.name : Object.prototype.toString.call(this).slice(8, -1);
}
catch(e) { if (this['toString']) r = this.toString().slice(8, -1); }
return !toLower ? r : r.toLowerCase();
}
Object['defineProperty'] && !Object.prototype.hasOwnProperty('realType')
? Object.defineProperty(Object.prototype, 'realType', { value: realType }) : Object.prototype['realType'] = realType;
})();
Maka cukup gunakan dengan mudah, seperti:
obj.realType() // would return 'Object'
obj.realType(true) // would return 'object'
Catatan: Ada 1 argumen yang bisa diterima. Jika bool of true
, maka pengembalian akan selalu dalam huruf kecil .
Lebih banyak contoh:
true.realType(); // "Boolean"
var a = 4; a.realType(); // "Number"
$('div:first').realType(); // "jQuery"
document.createElement('div').realType() // "HTMLDivElement"
Jika Anda memiliki sesuatu untuk ditambahkan yang mungkin bermanfaat, seperti mendefinisikan kapan suatu objek dibuat dengan perpustakaan lain (Moo, Proto, Yui, Dojo, dll ...) silakan berkomentar atau edit ini dan pertahankan agar lebih akurat dan tepat. ATAU berguling ke arah yang GitHubsaya buat untuk itu dan beri tahu saya. Anda juga akan menemukan tautan cepat ke file min cdn di sana.
typeof new RegExp(/./); // "function"
masalah di Chrome tampaknya diperbaiki di Chrome 14.