Мои 2 ¢! На самом деле, одна из причин, по которой я привожу это здесь, несмотря на длинный список ответов, заключается в том, чтобы предоставить немного больше all in one
типовых решений и получить обратную связь в будущем о том, как расширить его, чтобы включить больше real types
.
С помощью следующего решения, как было упомянуто выше, я объединил пару найденных здесь решений, а также включил исправление для возврата значения в jQueryопределенный объект jQuery, если он доступен . Я также добавляю метод к собственному прототипу Object. Я знаю, что это часто табу, так как это может помешать другим подобным расширениям, но я оставляю это user beware
. Если вам не нравится этот способ, просто скопируйте базовую функцию куда угодно и замените все переменные this
на параметр аргумента для передачи (например, arguments [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'
Примечание. Имеется 1 аргумент. Если это 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.