Wiem, że to może być pytanie dla początkujących, ale jestem ciekawa co do głównej korzyści z eval()
- gdzie byłby najlepiej wykorzystany? Doceniam wszelkie informacje.Jakie są główne zalety korzystania z eval() w JavaScript?
Odpowiedz
Najlepiej użyć funkcji eval
: Nigdy.
Jego celem jest ocena łańcucha jako wyrażenia JavaScript. Przykład:
eval('x = 42');
Został użyty dużo wcześniej, ponieważ wiele osób nie wie jak napisać odpowiedni kod dla tego, co chciałem zrobić. Na przykład w przypadku korzystania z dynamicznego nazwę pola:
eval('document.frm.'+frmName).value = text;
Właściwym sposobem na to byłoby:
document.frm[frmName].value = text;
Jako metodę eval
wykonuje ciąg jako kod, za każdym razem, że jest ona wykorzystywana jest potencjalnym otwarciem dla kogoś, kto wstrzyknie szkodliwy kod na stronę. Zobacz cross-site scripting.
Istnieje kilka uzasadnionych zastosowań funkcji eval
.Jest jednak mało prawdopodobne, że kiedykolwiek będziesz w sytuacji, w której będziesz go potrzebować.
eval()
nie powinno być używane w JavaScript.
eval()
był używany do analizowania ciągów JSON, ale to użycie zostało zastąpione przez szybszy i bezpieczniejszy JSON.parseJSON
.
Możesz uruchomić JS, który jest przechowywany w wartości pola na stronie.
Możesz używać eval z JS, po prostu twój kod jest bardziej przydatny do ataku. Dopóki nie korzysta z AJAX, nie ma problemu z serwerem.
Jeśli używasz eval, należy analizować na znaki [() <> {}]
eval() = evil
Nie należy używać go naprawdę w ogóle. Można go użyć do łatwego wstawiania kodu, ale ktoś może wstawić złe skrypty za pomocą eval()
. Czasami ludzie używają eval()
do analizowania JSON, lub
eval("obj." + id); //newbies
ale rzeczywiście można osiągnąć wszystkie te rzeczy bez użycia eval()
.
obj[id]; //should-do
Wszyscy wiemy, że nie powinieneś używać 'eval'; OP pytał, czy istnieją jakieś korzyści. –
@JeffreySweeney - (nie ma żadnego z nich, o czym mogę myśleć ...) –
Wiem, prawda? : P Być może można go wykorzystać do testowania luki w zabezpieczeniach na serwerze testowym lub do testowania szybkości (ponieważ jest to jedna z najwolniejszych funkcji w JS). –
eval
umożliwia wykonanie (lub oceny) ciąg kodu javascript.
W ten sposób ma zastosowanie, gdy chcemy, aby ktoś wykonał ciąg kodu javascript. Jak na przykład w edukacyjnym artykule na temat JavaScript, więc czytelnik może natychmiast go wypróbować :)
Lub, jeśli twoja strona jest skierowana do programistów, możesz chcieć, aby napisali i uruchomili własne wtyczki.
Najlepszym celem używania eval jest dynamiczne ładowanie kodu, generowanie kodu w czasie wykonywania i wykonywanie podobnych czynności związanych z metadanymi. Ogólnie rzecz biorąc, jeśli możesz zrobić to samo bez ewaluacji, nie używaj eval.
Jednym z najlepszych przypadków użycia eval jest rejestr javascript, w którym użytkownik może wykonywać javascript w czasie wykonywania. na przykład javascript logger pozwalając użytkownikowi na wykonanie skryptu w oknie rejestratora.
można zbudować szkielet klienta i uruchomić go jako aplikację podstawową - otrzymywać pakiety kodu, a następnie wykonywać je - co powoduje, że klient jest wyjątkowo elastyczny - mając cały kod na serwerze w pakietach. Jest to jednak bardzo ryzykowne i jeśli coś takiego jest potrzebne, być może powinieneś używać Java z pakietami Java. Dlaczego Eval jest nadal w języku jest dyskusyjna, to jest zbyt duże zagrożenie dla bezpieczeństwa w użyciu
Jak wspomniano wcześniej, istnieje potencjalne ryzyko związane podczas korzystania z funkcji eval(), Jeśli chcesz ocenić ciąg jako wyrazu ty może użyć $ {} do ewaluacji wyrażenia, wprowadzonej w ECMA-6
To jest dość stare pytanie i być może ludzie nie myśleli o przypadkach użycia dla eval()
prawidłowo w tym czasie. Jednym wielkim pożytkiem dla eval()
jest zaimplementowanie hot reloading do twojego backendu lub programu rozwojowego frontend.
Zasadniczo eval()
może umożliwiać edytowanie kodu w edytorze, a także łatanie uruchomionej aplikacji bez ponownego uruchamiania i bez utraty stanu (w zależności od implementacji). Potrzebny będzie powiązany kod, który będzie śledził zmiany w plikach, i w jakiś sposób prześle zmiany do aplikacji, ale ostatecznie jest to metoda przekształcania tych zmian w rzeczywisty js.
W tym pamiętać, myślę, że to jest całkowicie błędne napisać oświadczenie jak eval()
jest zła, czy nie powinien być stosowany. Powszechne stwierdzenia takie jak te są prawdziwym złem!
Jest to najlepszy i rzeczywisty przypadek użycia, który spotkałem. (y) – Ravi
Zgrabna odpowiedź. Jeśli ktoś budował coś takiego jak ReactJS lub Angular lub NodeJS, ta odpowiedź byłaby przydatna. =) – HoldOffHunger
Może się mylę, ale używam go przekonwertować klasyczny ciąg na ciąg ES6
Szablon:
let name = 'Daman'
let classicString = 'Hello ${name}'
let templateString = eval('`' + classicString + '`')
co daje mi to, czego potrzebuję:
"Hello Daman"
- 1. Jakie są zalety korzystania z Qt?
- 2. Jakie są zalety korzystania z rubinius
- 3. BindingSource - jakie są zalety korzystania z BindingSource
- 4. Jakie są zalety korzystania z Powershell zamiast VBScript?
- 5. Jakie są zalety korzystania z widoku w bazie danych?
- 6. Jakie są zalety korzystania z Objective-C przez C++?
- 7. Jakie są zalety korzystania z BIO_printf() zamiast printf()?
- 8. Jakie są zalety coroutines?
- 9. Jakie są zalety JRebel?
- 10. Jakie są zalety korzystania z numpy.identity przez numpy.eye?
- 11. Jakie są zalety korzystania z uniform_int_distribution vs operacji modulus?
- 12. Jakie są zalety VistaDB
- 13. Jakie są zalety NSBinaryStoreType?
- 14. Zalety korzystania z Core Graphics
- 15. jakie są zalety MVC3 nad MVC2
- 16. Jakie są zalety różnych endiannesses?
- 17. Jakie są zalety używania zastrzeżenia?
- 18. Jakie są zalety MongoDB w porównaniu z MySQL i PostgreSQL?
- 19. Jakie są zalety tworzenia właściwości nieprzeliczalnych?
- 20. Jakie są rzeczywiste zalety wzoru gościa? Jakie są alternatywy?
- 21. getc() vs fgetc() - Jakie są główne różnice?
- 22. Jakie są zalety korzystania z DB Aware Controls zamiast z DB DB Aware Controls w Delphi
- 23. jakie są zalety definiowania klucza obcego?
- 24. Jakie są zalety/wady szwy nad sprężyną?
- 25. Jakie są względne zalety wxHaskell i Gtk2HS?
- 26. Jakie są zasady i zalety "modelu partyjnego"?
- 27. Jakie są zalety używania `require` w module zamiast u góry?
- 28. Jakie są zalety pliku obsługi ASHX w asp.net?
- 29. Jakie są zalety i wady korzystania z usługi w innym procesie?
- 30. Jakie są zalety korzystania z modułu Eventlet w pythonie przez moduł wątków?
możliwy duplikat [Czy istnieje jakikolwiek powód, by używać eval()?] (Http://stackoverflow.com/questions/1826859/is-there-ever-a-good-reason-to-use-eval) –
Dlaczego jest to oznaczone? 'praca domowa'? –
@Derek - dzięki, naprawiono – Coffee