i) jaka jest różnica między tymi dwoma obiektami
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.
ii) jaki to rodzaj Obiektu
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ąc
Object.prototype.toString.apply(obj);
Wiele isArrayimplementacji 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 ).
iii) jakie właściwości zawiera ten obiekt i jakie są wartości każdej właściwości
W ECMAScript 3 można iterować po wyliczalnych właściwościach za pomocą for...inpę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.