Próbuję zaalarmować zwróconą wartość z funkcji i otrzymuję to w alercie:
[object Object]
Oto kod JavaScript:
<script type="text/javascript">
$(function ()
{
var $main = $('#main'),
$1 = $('#1'),
$2 = $('#2');
$2.hide(); // hide div#2 when the page is loaded
$main.click(function ()
{
$1.toggle();
$2.toggle();
});
$('#senddvd').click(function ()
{
alert('hello');
var a=whichIsVisible();
alert(whichIsVisible());
});
function whichIsVisible()
{
if (!$1.is(':hidden')) return $1;
if (!$2.is(':hidden')) return $2;
}
});
</script>
whichIsVisible
to funkcja, którą próbuję sprawdzić.
javascript
jquery
Prady
źródło
źródło
Odpowiedzi:
Domyślna konwersja obiektu na ciąg to
"[object Object]"
.Jeśli masz do czynienia z obiektami jQuery, możesz chcieć to zrobić
wydrukować identyfikator elementu.
Jak wspomniano w komentarzach, powinieneś używać narzędzi dostępnych w przeglądarkach, takich jak Firefox lub Chrome, do introspekcji obiektów, wykonując
console.log(whichIsVisible())
zamiastalert
.Uwaga : identyfikatory nie powinny zaczynać się cyframi.
źródło
Jak zauważyli inni, jest to domyślna serializacja obiektu. Ale dlaczego tak jest,
[object Object]
a nie tylko[object]
?Dzieje się tak, ponieważ w Javascript są różne typy obiektów!
stringify(function (){})
->[object Function]
stringify([])
->[object Array]
stringify(/x/)
->[object RegExp]
stringify(new Date)
->[object Date]
stringify({})
->[object Object]
Dzieje się tak, ponieważ wywoływana jest funkcja konstruktora
Object
(przez duże „O”), a termin „obiekt” (z małym „o”) odnosi się do strukturalnej natury rzeczy.Zwykle, kiedy mówisz o „obiektach” w JavaScript, tak naprawdę masz na myśli „ obiekty obiektów ”, a nie inne typy.
gdzie
stringify
powinno wyglądać tak:źródło
thingy
JSON.stringify
, ktoś może odnieść złe wrażenie.Object.prototype.toString.call(undefined)
daje[object Undefined]
?[object Object]
jest domyślną reprezentacją obiektu toString w javascript.Jeśli chcesz poznać właściwości swojego obiektu, po prostu przejrzyj go w ten sposób:
W twoim konkretnym przypadku otrzymujesz obiekt jQuery. Spróbuj zamiast tego:
Powinno to ostrzec identyfikator widocznego elementu.
źródło
Jest to wartość zwracana przez
toString()
funkcję tego obiektu .Rozumiem, co próbujesz zrobić, ponieważ wczoraj odpowiedziałem na twoje pytanie dotyczące określenia, który element div jest widoczny. :) zwraca rzeczywisty obiekt jQuery, bo myślałem, że będzie bardziej programowo użyteczne. Jeśli chcesz użyć tej funkcji do celów debugowania, możesz po prostu zrobić coś takiego:
whichIsVisible()
To powiedziawszy, naprawdę powinieneś używać odpowiedniego debugera, a nie
alert()
próbować debugować problem. Jeśli używasz Firefoksa, Firebug jest doskonały. Jeśli używasz IE8, Safari lub Chrome, mają one wbudowane debugery.źródło
W ten sposób możesz zobaczyć wartość wewnątrz [obiekt obiektu]
Spróbuj w ten sposób
odniesienie
https://off.tokyo/blog/react-native-object-object/
źródło
Podstawy
Możesz tego nie wiedzieć, ale w JavaScript, ilekroć wchodzimy w interakcję z ciągami, liczbami lub prymitywami logicznymi, wkraczamy w ukryty świat cieni obiektów i przymusu.
string, number, boolean, null, undefined i symbol.
W JavaScript jest 7 prymitywne typy:
undefined
,null
,boolean
,string
,number
,bigint
isymbol
. Wszystko inne jest przedmiotem. Prymitywne typyboolean
,string
inumber
mogą być owinięte obiektowych ich odpowiedniki. Przedmioty te są instancjeBoolean
,String
iNumber
konstruktorzy odpowiednio.Jeśli prymitywy nie mają właściwości, dlaczego
"this is a string".length
zwraca wartość?Ponieważ JavaScript z łatwością koeruje między prymitywami a obiektami. W tym przypadku wartość ciągu jest przekształcana w obiekt typu łańcuchowego w celu uzyskania dostępu do długości właściwości. Obiekt string jest używany tylko przez ułamek sekundy, po czym jest składany w ofierze Bogom zbieraczy śmieci - ale zgodnie z duchem programów telewizyjnych, złapiemy nieuchwytne stworzenie i zachowamy je do dalszej analizy…
Aby to jeszcze bardziej zademonstrować, rozważmy następujący przykład, w którym dodajemy nową właściwość do prototypu konstruktora String.
W ten sposób prymitywy mają dostęp do wszystkich właściwości (w tym metod) zdefiniowanych przez ich konstruktory obiektów.
Widzieliśmy więc, że typy prymitywne będą odpowiednio przekształcać się w odpowiadające im odpowiedniki Object, gdy będzie to wymagane.
Analiza
toString()
metodyRozważmy następujący kod
Jak omówiono powyżej, tak naprawdę dzieje się, gdy wywołujemy
toString()
metodę na typie pierwotnym, zanim będzie mogła wywołać metodę, musi zostać przekształcona w jej odpowiednik obiektowy.czyli
myNumber.toString()
jest odpowiednikiemNumber.prototype.toString.call(myNumber)
i podobnie dla innych typów pierwotnych.Ale co, jeśli zamiast przekazywania typu pierwotnego do
toString()
metody odpowiadającego mu odpowiednika funkcji konstruktora Object, wymuszamy przekazanie typu pierwotnego jako parametru dotoString()
metody konstruktora funkcji Object (Object.prototype.toString.call(x)
)?Bliższe spojrzenie na Object.prototype.toString ()
Zgodnie z dokumentacją , gdy wywoływana jest metoda toString, wykonywane są następujące kroki:
Zrozum to na podstawie poniższego przykładu
Źródła: https://es5.github.io/x15.2.html#x15.2.4.2 https://es5.github.io/x9.html#x9.9 https://javascriptweblog.wordpress.com/ 2010/09/27 / tajne-życie-prymitywów-javascript /
źródło
[object Object]
jest domyślną reprezentacją ciągu JavaScriptObject
. Oto, co otrzymasz, jeśli uruchomisz ten kod:Możesz zmienić domyślną reprezentację, zastępując
toString
metodę w następujący sposób:źródło
[object Object]
pochodzi struna.Masz obiekt javascript
$1
i$2
są obiektami jquery, mogą być używanealert($1.text());
do pobierania tekstu lubalert($1.attr('id');
itp ...musisz traktować
$1
i$2
lubić obiekty jQuery.źródło
Próbujesz zwrócić obiekt. Ponieważ nie ma dobrego sposobu na przedstawienie obiektu jako ciągu znaków, wartość obiektu
.toString()
jest automatycznie ustawiana jako"[object Object]"
.źródło