Kiedy console.log()
w moim programie JavaScript widzę obiekt, po prostu widzę dane wyjściowe [object Object]
, które nie są zbyt pomocne w ustaleniu, jaki to obiekt (ani nawet jakiego typu).
W C # jestem przyzwyczajony do zastępowania, ToString()
aby móc dostosować reprezentację debugera do obiektu. Czy jest coś podobnego, co mogę zrobić w JavaScript?
javascript
debugging
tostring
devios1
źródło
źródło
typeof
).Odpowiedzi:
Możesz również nadpisać
toString
w JavaScript. Zobacz przykład:Zobacz tę dyskusję, jak określić nazwę typu obiektu w JavaScript.
źródło
toString
właściwość prototypu ,Object.prototype.toString.call(f)
nadal będzie wyświetlana[object Object]
.Najpierw nadpisanie
toString
dla twojego obiektu lub prototypu:Następnie przekonwertuj na ciąg, aby zobaczyć reprezentację ciągu obiektu:
Jeśli nie podoba ci się dodatkowe wpisywanie, możesz utworzyć funkcję, która rejestruje łańcuchowe reprezentacje swoich argumentów w konsoli:
Stosowanie:
Aktualizacja
E2015 zapewnia o wiele ładniejszą składnię dla tych rzeczy, ale będziesz musiał użyć transpilera, takiego jak Babel :
źródło
Prostym sposobem uzyskania danych wyjściowych, które można debugować w przeglądarce JS, jest po prostu serializacja obiektu do formatu JSON. Więc możesz zadzwonić w stylu
Na przykład
alert("Blah! " + JSON.stringify({key: "value"}));
generuje alert z tekstemBlah! {"key":"value"}
źródło
Jeśli używasz Node, warto to rozważyć
util.inspect
.To da:
Natomiast wersja bez kontroli wydruków:
źródło
Po prostu zastąp
toString()
metodę.Prosty przykład:
Działa jeszcze lepiej, gdy zdefiniujesz nowy typ:
źródło
v0.10.*
lub ChromeVersion 32.0.1700.102
. Podczas bezpośredniego wywoływania toString (lame) lub używania koercji typu (lamer) będzie z tym działać, console [/ info | log /] używa starego przedmodelowania toString.Jeśli obiekt jest zdefiniowany przez Ciebie, zawsze możesz dodać przesłonięcie toString.
źródło
Z literałami szablonów :
źródło
Dodaj właściwość „Symbol.toStringTag” do obiektu lub klasy niestandardowej.
Wartość ciągu, która jest do niego przypisana, będzie domyślnym opisem ciągu, ponieważ
Object.prototype.toString()
metoda jest dostępna wewnętrznie .Na przykład:
Pokaż fragment kodu
Niektóre typy JavaScript, takie jak Mapy i Obietnice, mają
toStringTag
zdefiniowany wbudowany symbolPonieważ
Symbol.toStringTag
jest to dobrze znany symbol , możemy się do niego odwołać i sprawdzić, czy powyższe typy mają właściwość Symbol.toStringTag -źródło
toString()
jedyny sposób na osiągnięcie tego w połączeniu z bezpośrednim nadpisywaniemfunction MyObj() {} Object.prototype.toString.call(new MyObj()) // "[object MyObj]"
?Dziennik konsoli Chrome umożliwia sprawdzenie obiektu.
źródło
console.log("this is my object:", obj)
.-Ta operacja zajmuje dużo czasu i jej użycie jest odradzane zgodnie z dokumentacją Mozilli: https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object/proto
-Wydaje się, że nowoczesne przeglądarki są przestarzałe .prototype, a ECMA6 używa zamiast tego właściwego _proto__.
Tak na przykład, jeśli jesteś właścicielem obiektu definiowania geoposition należy zadzwonić __proto__ własność zamiast .prototype :
źródło
Oto przykład, jak zdefiniować obiekt Map:
źródło
Możesz nadać dowolnym obiektom niestandardowym własne metody toString lub napisać ogólną metodę, którą możesz wywołać dla obiektu, na który patrzysz -
źródło
Zamiast nadpisywać
toString()
, jeśli włączysz bibliotekę Prototype JavaScript , możesz użyć jej,Object.inspect()
aby uzyskać znacznie bardziej użyteczną reprezentację.Najpopularniejsze frameworki zawierają coś podobnego.
źródło
Możesz rozszerzyć lub zastąpić w JS
źródło
źródło