W JavaScript / jQuery, jeśli mam alert
jakiś obiekt, otrzymuję albo [object]
albo [object Object]
Czy jest jakiś sposób, aby dowiedzieć się:
jaka jest różnica między tymi dwoma obiektami
jaki to rodzaj obiektu
jakie właściwości zawiera ten obiekt i jakie są wartości każdej właściwości
?
javascript
jquery
Saiful
źródło
źródło
Odpowiedzi:
Możesz wyszukać klucze i wartości obiektu, wywołując natywną
for in
pętlę JavaScript :lub używając
.each()
metody jQuery :Z wyjątkiem sześciu typów pierwotnych , wszystko w ECMA- / JavaScript jest obiektem. Tablice; Funkcje; wszystko jest przedmiotem. Nawet większość tych prymitywów to w rzeczywistości także obiekty z ograniczonym wyborem metod. W razie potrzeby wrzucane są do przedmiotów pod maską. Aby poznać nazwę klasy bazowej, możesz wywołać
Object.prototype.toString
metodę na obiekcie, na przykład:Powyższe wyjdzie
[object Array]
.Istnieje kilka innych nazw klas, jak
[object Object]
,[object Function]
,[object Date]
,[object String]
,[object Number]
,[object Array]
, i[object Regex]
.źródło
typeof new String("foo");
produkuje „obiekt”, jest to opakowana wartość pierwotna, podczas gdytypeof "foo";
produkuje „łańcuch”. Zobacz takżevar str = 'primitive'; str.foo = 'bar'; /*wouldn't work*/
mając na uwadze, żevar oStr = new String('string object'); oStr.foo = 'bar'; /*works*/
jeśli zamierzasz to wyabstrahować i nazwać je wszystkimi obiektami, możesz uciec od myślenia o prymitywach jako obiektach prymitywnych, ale nie jest to równoważne z nadklasą prawdziwych obiektów JavaScript.console.log
do inspekcji obiektówAby uzyskać listę właściwości / wartości obiektu:
W przeglądarce Firefox - Firebug:
Standardowy JS do pobierania kluczy obiektów pożyczonych od Slashnick :
Edycje:
<object>
w powyższym ma zostać zastąpione zmiennym odniesieniem do obiektu.console.log()
ma być używany w konsoli, jeśli nie masz pewności, co to jest, możesz zastąpić go rozszerzeniemalert()
źródło
Prosta odpowiedź brzmi:
[object]
wskazuje obiekt hosta, który nie ma klasy wewnętrznej. Obiekt hosta to obiekt, który nie jest częścią implementacji ECMAScript, z którą pracujesz, ale jest dostarczany przez hosta jako rozszerzenie. DOM jest typowym przykładem obiektów hosta, chociaż w większości nowszych implementacji obiekty DOM dziedziczą po natywnym Object i mają wewnętrzne nazwy klas (takie jak HTMLElement , Window itp.). Innym przykładem obiektu hosta jest zastrzeżony obiekt ActiveXObject w IE.[object]
jest najczęściej spotykane podczas ostrzegania obiektów DOM w programie Internet Explorer 7 i starszych, ponieważ są to obiekty hosta, które nie mają wewnętrznej nazwy klasy.Możesz uzyskać "typ" (klasę wewnętrzną) obiektu używając
Object.prototype.toString
. Specyfikacja wymaga, aby zawsze zwracała ciąg w formacie[object [[Class]]]
, gdzie[[Class]]
jest wewnętrzna nazwa klasy, taka jak Object , Array , Date , RegExp itp. Możesz zastosować tę metodę do dowolnego obiektu (w tym obiektów hosta), używającWiele
isArray
implementacji używa tej techniki, aby odkryć, czy obiekt jest w rzeczywistości tablicą (chociaż w IE nie jest tak solidna, jak w innych przeglądarkach ).W ECMAScript 3 można iterować po wyliczalnych właściwościach za pomocą
for...in
pętli. Zwróć uwagę, że większości wbudowanych właściwości nie można wyliczyć. To samo dotyczy niektórych obiektów hosta. W ECMAScript 5 można uzyskać tablicę zawierającą nazwy wszystkich niedziedziczonych właściwości za pomocąObject.getOwnPropertyNames(obj)
. Ta tablica będzie zawierać nie wyliczalne i wyliczalne nazwy właściwości.źródło
Mam nadzieję, że to nie jest spamem. Z pokorą napisałem funkcję po niekończących się sesjach debugowania: http://github.com/halilim/Javascript-Simple-Object-Inspect
Stosowanie
lub
źródło
Pobierz FireBug dla Mozilla Firefox.
posługiwać się
console.log(obj);
źródło
console.log
jest równie skuteczny, możesz kliknąć obiekt w dzienniku, aby mimo wszystko uzyskać „dir” ...Spotlight.js to świetna biblioteka do iterowania po obiekcie okna i innych obiektach hosta w poszukiwaniu określonych rzeczy.
Spodoba ci się za to.
źródło
Skanowanie obiektu do pierwszego wejścia określonego rekwizytu:
źródło