2012-12-03 10 views
6

Powiel możliwe:
How can I get the memory address of a JavaScript variable?druku handler/referencje tablicy (lub obiekt) w JavaScript

Czy istnieje sposób, w javascript, aby wydrukować odniesienie tablicy ?

Co chcę zrobić, to sprawdzić, czy dwie tablice mają ten sam punkt odniesienia, a można to zrobić jak sugeruje ten post: How to check if two vars have the same reference?

Ale czy to możliwe, aby wydrukować odniesienia, jeśli na przykład jestem pracujesz z tablicą?

Przykład

var Array1=["hi"]; 
var Array2=["hello"]; 

var thesame = Array1==Array2; 

ta sama wartość jest false.

Ale czy mogę wydrukować odniesienie do Array1 z czymś podobnym do window.alert(@Array1); w javascript?

--update -

Co dokładnie chcesz to rzeczywista przestrzeń adresowa jest określany.

+0

Jak wydrukować odniesienie? –

+0

z 'typeof()' Otrzymuję tylko odpowiedź, że jest to obiekt. Zobacz tutaj http://jsbin.com/ezokam/1/ –

+0

Czego się domagasz, chcesz, aby faktyczna przestrzeń adresowa była przywoływana, czy chcesz wydrukować "Array"? – PinnyM

Odpowiedz

3

Implementacje Javascript są standaryzowane tylko pod warunkiem, że są zgodne ze specyfikacją ECMA. Zawiłości pamięci mogą się różnić w zależności od przeglądarki i nie są dostępne dla JS.

Jeśli chodzi o pytanie: dlaczego dotyczy to:: JS jest lekkim językiem skryptowym. Sensowne jest delegowanie zadań zarządzania pamięcią i optymalizacji na platformę, podczas gdy niepotrzebne przeskakiwanie obręczami wymagałoby odsłonięcia dla ciebie interfejsu.

+0

OK Rozumiem z tego, co mówisz, że nie jest możliwe uzyskanie PRAWDZIWEJ lokalizacji pamięci. Ale także wewnętrzna reprezentacja wskaźnika/odniesienia byłaby w porządku. Nie mogę zrozumieć, co napisałem w komentarzu do @Minko Gecheva. –

+0

@DanieleB Do czego jest to potrzebne? –

3

Jeśli chcesz zobaczyć wartość pewnego rodzaju wskaźnika do typu odniesienia (tablica, obiekt) - nie można.

Na przykład w Perlu masz typ skalarny, który jest odniesieniem do czegoś. Kiedy wydrukujesz ten skalar, możesz uzyskać coś w rodzaju ciągu znaków na wskaźniku do wartości. W JavaScript nie ma analogii tego skalara.

Można tylko sprawdzić, czy dwa odniesienia wskazują na to samo, czy nie.

Tak jak we wszystkich językach z GC, w JavaScript nie można mieć pewności, że ten sam obiekt będzie miał ten sam wskaźnik pamięci po uruchomieniu programu (można go przenieść w stercie). Jak już wspomniałem, nie ma abstrakcji wskaźnika jako typu wbudowanego w języku. Zatem pokazanie obecnego odniesienia może być niezbyt dobrym pomysłem, ponieważ może być dynamiczne (w zależności od architektury silnika, a zwłaszcza GC).

+1

To jest dziwne. Jeśli możesz porównać dwa odniesienia, dlaczego nie znasz ich rzeczywistej wartości? –

+0

@DanieleB Ponieważ nie ma koncepcji alokacji pamięci w języku JavaScript widocznej dla programisty, dlatego nie ma powodu, aby znać ich lokalizację w pamięci – Ian

+0

@DanieleB Prawdopodobnie dlatego, że pozwoliłoby to na potraktowanie wskaźników jako liczby całkowite i całkowite jako wskaźniki – Neil

Powiązane problemy