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?

Author: Michał Perłakowski, 2009-03-20

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]
 47
Author: Crescent Fresh,
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.

 12
Author: Ben,
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.

 11
Author: Alan Storm,
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