BEARBEITEN: In Bezug auf den Kommentar unter Ihrer Frage, es klingt wie Sie für den Unterschied zwischen einem DOM-Element und einem Location-Objekt testen müssen.
Mit der Eigenschaft nodeType
werden Sie wahrscheinlich besser das DOM-Element testen können.
if(obj.nodeType) {
// it was a DOM element
}
Dann können Sie auf verschiedene Eigenschaften testen, ob nodeType
nicht gefunden wurde, nur um sicher zu sein, es ist ein location
Objekt ist.
if(obj.nodeType) {
// it was a DOM element
} else if(obj.hostname && obj.pathname) {
// it was a location object
} else {
// some ERROR
}
Ursprüngliche Antwort:
Dies funktioniert für mich in Chrome, Safari, Firefox:
Object.prototype.toString.call(window.location) == '[object Location]';
ich in IE nicht richtig in dieser Minute testen, though.
Dies ist die in der ECMAScript-Spezifikation Section 8.6.2 angegebene Methode zum Abrufen des internen [[Class]]
-Eigenschaftsnamens.
Vielleicht sollten Sie erklären, was der Zweck dieser Überprüfung ist? Ich glaube nicht, dass solche internen Klassennamen (Location, HTMLElement usw.) vollständig in allen Browsern geteilt werden. Daher könnte es hilfreich sein zu wissen, was Sie tun möchten, um Alternativen vorzuschlagen. –
Interessante Beobachtung: Das Abrufen des Konstruktornamens des Standortobjekts in IE schlägt ebenfalls fehl. Mit der Technik in http://stackoverflow.com/questions/332422/how-do-i-get-the-name-of-an-objects-type-in-javascript – kander
Ich arbeite an einem jQuery-Plugin, das mappt URL-Anker zu JS-Funktionen. Das Plugin übernimmt ein Argument, das entweder ein DOM-Element oder ein 'Location'-Objekt sein kann. Ich brauche also einen Weg, um zu überprüfen, was ein Argument ist. :) –