Jaki jest sens operatora void w JavaScript?
Widziałem ludzi używających void
operatora w swoim kodzie. Widziałem to również w href
atrybuty: javascript:void(0)
które nie wydają się lepsze niż javascript:;
Jakie jest więc uzasadnienie użycia operatora void
?
3 answers
Wyjaśnienie jego użycia w linkach :
To jest powód, dla którego bookmarklets często zawijamy kod wewnątrz void() lub funkcja anonimowa, która nie zwróć cokolwiek, aby zatrzymać przeglądarkę od próby wyświetlenia wyniku wykonanie broszury. Na przykład:
javascript:void(window.open("dom_spy.html"))
Jeśli bezpośrednio użyjesz kodu, który zwróci coś (nowa instancja okna w tym przypadku), przeglądarka skończy się displaying that:
javascript:window.open("dom_spy.html");
W Firefoksie powyżej wyświetli się:
[object Window]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-09 06:11:41
Wartość {[0] } nie była bezpośrednio dostępna w JavaScript aż do ES1. 3.
Operator void <expression>
został zatem uwzględniony w celu umożliwienia dostępu do tej wartości.
Jest czasami przydatne, szczególnie podczas pracy z Web API (np. programy obsługi zdarzeń), aby upewnić się, że wynik wyrażenia jest spójny undefined
.
Gdy właściwość undefined
została dodana do obiektu globalnego w ES1.3, użyteczność void
stała się nieoczywista.
Stąd twój pytanie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-31 21:38:12
Rozważ co następuje:
<a href="javascript:void(fish=document.getElementById('foo').value);void(document.getElementById('bar').value=fish);">With Void</a>
<a href="javascript:fish=document.getElementById('foo').value;document.getElementById('bar').value=fish;">Without Void</a>
<input type="text" id="foo" value="one fish" />
<input type="text" id="bar" value="no fish" />
Pierwszy link zamieni wartości pól tekstowych. Drugi link otworzy nową stronę z tekstem "jedna ryba". Jeśli użyjesz javascript: link
, w chwili gdy wyrażenie zwróci coś innego niż null
lub undefined
, przeglądarka zinterpretuje to jako to, co link powinien zrobić. Owijając wszystkie wyrażenia/stany w funkcję void()
, masz pewność, że cały fragment kodu zostanie uruchomiony. W dzisiejszych czasach, jest to przede wszystkim zastosowanie w Bookmarklets, jak za pomocą Atrybut onclick
, czyli ustawianie procedur obsługi zdarzeń w oddzielnych blokach/plikach Javascript jest "normą".
Jeśli chodzi o javascript:
vs. javascript:void()
, pierwsze stwierdzenie jest niejednoznaczne. Mówisz: "Hej, chcę uruchomić javascript", ale nie podajesz żadnego kodu. Niekoniecznie jest jasne, co powinna tutaj zrobić przeglądarka. W drugim oświadczeniu mówisz "Hej, Uruchom javascript", a Twój kod w końcu zwraca niezdefiniowany, co przeglądarka wie, że oznacza"nic nie rób".
Ponieważ jestem w tym miejscu zaznaczę również, że użycie javascript:
lub javascript:void();
wypadło z łask większości ludzi, którym zależy na znacznikach. Lepiej jest mieć onclick handler zwraca false, i mieć link skierowany do strony / zasobu, który ma sens dla osób, które mają javascript wyłączony, lub są za pomocą blokera javascript, takich jak NoScript.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-31 17:13:53