Мої 2 ¢! Дійсно, частина причини, по якій я кидаю це сюди, незважаючи на довгий список відповідей, полягає в тому, щоб запропонувати трохи більше all in one
типів рішення та отримати деякий зворотній зв'язок у майбутньому про те, як розширити його, щоб включити більше real types
.
З наступним рішенням, як було сказано вище, я поєднав пару знайдених тут рішень, а також включив виправлення для повернення значення jQueryоб'єкта, визначеного jQuery, якщо він є . Я також додаю метод до нативного прототипу Object. Я знаю, що це часто табу, оскільки це може заважати іншим таким розширенням, але я залишаю це user beware
. Якщо вам не подобається такий спосіб його виконання, просто скопіюйте базову функцію куди завгодно і замініть всі змінні this
параметром аргументу для передачі (наприклад, аргументи [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;
})();
Тоді просто використовуйте з легкістю, як-от так:
obj.realType() // would return 'Object'
obj.realType(true) // would return 'object'
Примітка. Є один аргумент прохідний. Якщо це bool of true
, то повернення завжди буде в малому регістрі .
Більше прикладів:
true.realType(); // "Boolean"
var a = 4; a.realType(); // "Number"
$('div:first').realType(); // "jQuery"
document.createElement('div').realType() // "HTMLDivElement"
Якщо у вас є що додати, що може бути корисним, наприклад, визначити, коли об’єкт створено за допомогою іншої бібліотеки (Moo, Proto, Yui, Dojo тощо). точний і точний. АБО перекиньте на GitHubя, зроблений для цього, і дайте мені знати. Ви також знайдете там швидке посилання на файл cdn min.
typeof new RegExp(/./); // "function"
видається , що проблема в Chrome виправлена в Chrome 14.