Moje 2 ¢! Naprawdę, jednym z powodów, dla których rzucam to tutaj, pomimo długiej listy odpowiedzi, jest dostarczenie trochę więcej all in one
typowego rozwiązania i uzyskanie informacji zwrotnej w przyszłości, w jaki sposób go rozwinąć, aby uwzględnić więcejreal types
.
Z poniższym rozwiązaniem, jak wspomniano powyżej, połączyłem kilka znalezionych tutaj rozwiązań, a także wprowadziłem poprawkę do zwracania wartości jQueryna obiekcie zdefiniowanym przez jQuery, jeśli jest dostępny . Dołączam również metodę do natywnego prototypu Object. Wiem, że często jest to tabu, ponieważ może zakłócać inne takie rozszerzenia, ale pozostawiam to user beware
. Jeśli nie podoba ci się ten sposób, po prostu skopiuj funkcję podstawową w dowolnym miejscu i zastąp wszystkie zmienne this
parametrem argumentu, aby przekazać (np. Argumenty [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;
})();
Następnie po prostu używaj z łatwością, tak:
obj.realType() // would return 'Object'
obj.realType(true) // would return 'object'
Uwaga: Istnieje 1 argument do przejedzenia. Jeśli jest bool true
, wówczas zwrot zawsze będzie pisany małymi literami .
Więcej przykładów:
true.realType(); // "Boolean"
var a = 4; a.realType(); // "Number"
$('div:first').realType(); // "jQuery"
document.createElement('div').realType() // "HTMLDivElement"
Jeśli masz coś do dodania, co może być pomocne, na przykład określenie, kiedy obiekt został utworzony za pomocą innej biblioteki (Moo, Proto, Yui, Dojo itp.). Zachęcamy do komentowania lub edytowania tego i kontynuowania. dokładne i precyzyjne. LUB przejdź do strony, GitHubktórą dla tego stworzyłem i daj mi znać. Znajdziesz tam również szybki link do pliku min cdn.
typeof new RegExp(/./); // "function"
problem w Chrome wydaje się być rozwiązany w Chrome 14.