- void operator
- Try it
- Syntax
- Description
- Examples
- Immediately Invoked Function Expressions
- JavaScript URIs
- Non-leaking Arrow Functions
- Specifications
- Browser compatibility
- See also
- Found a content problem with this page?
- MDN
- Support
- Our communities
- Developers
- Why is JavaScript function void?
- How do you write JavaScript void?
- What is the use of void operator?
- Why do we use void?
- Is void a type?
- What does void main () mean?
- Can we write void main void?
- What is Getch?
- Is Main () and main void same?
- Why is main void in Java?
- What does argc mean?
- What is Getopt?
- Recent Posts
- Заметка о void в JavaScript и TypeScript
- Оператор void в JavaScript
- Тип данных void в TypeScript
- Итоги
void operator
The void operator evaluates the given expression and then returns undefined .
Try it
Syntax
Description
This operator allows evaluating expressions that produce a value into places where an expression that evaluates to undefined is desired.
The void operator is often used merely to obtain the undefined primitive value, usually using void(0) (which is equivalent to void 0 ). In these cases, the global variable undefined can be used.
It should be noted that the precedence of the void operator should be taken into account and that parentheses can help clarify the resolution of the expression following the void operator:
void 2 === "2"; // (void 2) === '2', returns false void (2 === "2"); // void (2 === '2'), returns undefined
Examples
Immediately Invoked Function Expressions
When using an immediately-invoked function expression, the function keyword cannot be at the immediate start of the statement, because that would be parsed as a function declaration, and would generate a syntax error when the parentheses representing invocation is reached — if the function is unnamed, it would immediately be a syntax error if the function is parsed as a declaration.
function iife() console.log("Executed!"); >(); // SyntaxError: Unexpected token ')' function () console.log("Executed!"); >(); // SyntaxError: Function statements require a function name
In order for the function to be parsed as an expression, the function keyword has to appear at a position that only accepts expressions, not statements. This can be achieved be prefixing the keyword with a unary operator, which only accepts expressions as operands. Function invocation has higher precedence than unary operators, so it will be executed first. Its return value (which is almost always undefined ) will be passed to the unary operator and then immediately discarded.
Of all the unary operators, void offers the best semantic, because it clearly signals that the return value of the function invocation should be discarded.
void function () console.log("Executed!"); >(); // Logs "Executed!"
This is a bit longer than wrapping the function expression in parentheses, which has the same effect of forcing the function keyword to be parsed as the start of an expression instead of a statement.
(function () console.log("Executed!"); >)();
JavaScript URIs
When a browser follows a javascript: URI, it evaluates the code in the URI and then replaces the contents of the page with the returned value, unless the returned value is undefined . The void operator can be used to return undefined . For example:
a href="javascript:void(0);">Click here to do nothinga> a href="javascript:void(document.body.style.backgroundColor='green');"> Click here for green background a>
Note: javascript: pseudo protocol is discouraged over other alternatives, such as unobtrusive event handlers.
Non-leaking Arrow Functions
Arrow functions introduce a short-hand braceless syntax that returns an expression. This can cause unintended side effects by returning the result of a function call that previously returned nothing. To be safe, when the return value of a function is not intended to be used, it can be passed to the void operator to ensure that (for example) changing APIs do not cause arrow functions’ behaviors to change.
.onclick = () => void doSomething();
This ensures the return value of doSomething changing from undefined to true will not change the behavior of this code.
Specifications
Browser compatibility
BCD tables only load in the browser
See also
Found a content problem with this page?
This page was last modified on Apr 5, 2023 by MDN contributors.
Your blueprint for a better internet.
MDN
Support
Our communities
Developers
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2023 by individual mozilla.org contributors. Content available under a Creative Commons license.
Why is JavaScript function void?
void(): This operator allows inserting expressions that produce side effects into places where an expression that evaluates to undefined is desired. The void operator is often used merely to obtain the undefined primitive value, usually using “void(0)” (which is equivalent to “void 0”).
How do you write JavaScript void?
Using “javascript:void(0);” in anchor tag: Writing “javascript:void(0);” in anchor tag can prevent the page to reload and JavaScript functions can be called on single or double clicks easily.
Are there void functions in JavaScript?
When using an immediately-invoked function expression, void can be used to force the function keyword to be treated as an expression instead of a declaration. void function iife() < console. Executing the above function without the void keyword will result in an Uncaught SyntaxError.
What is the use of void operator?
The void operator is used to evaluate a JavaScript expression without returning a value.
Why do we use void?
void (C++) When used as a function return type, the void keyword specifies that the function does not return a value. When used for a function’s parameter list, void specifies that the function takes no parameters. When used in the declaration of a pointer, void specifies that the pointer is “universal.”
What is a void function?
Void functions are created and used just like value-returning functions except they do not return a value after the function executes. In lieu of a data type, void functions use the keyword “void.” A void function performs a task, and then control returns back to the caller–but, it does not return a value.
Is void a type?
What does void main () mean?
The void main() indicates that the main() function will not return any value, but the int main() indicates that the main() can return integer type data. When our program is simple, and it is not going to terminate before reaching the last line of the code, or the code is error free, then we can use the void main().
Is void main valid?
No. It’s non-standard. The standard prototype of main is int main() with the optional command line arguments argc and argv . The int returned by main() is a way for a program to return a value to the system that invokes it.
Can we write void main void?
If you write the whole error-free main() function without return statement at the end then compiler automatically add return statement with proper datatype at the end of the program. To summarize above, it is never a good idea to use “void main()” or just “main()” as it doesn’t confirm standards.
What is Getch?
getch() is a way to get a user inputted character. It can be used to hold program execution, but the “holding” is simply a side-effect of its primary purpose, which is to wait until the user enters a character. getch() and getchar() are used to read a character from screen.
What is #include Stdio H?
The header file which is added to the program that one has written is basically what ‘include stdio.h.’ means. Stdio.h is known to contain the input and output operations like “printf” or “scanf” etc. ” h” extension means the header file. If you request to use a header file in the program by actually…
Is Main () and main void same?
In C++, both fun() and fun(void) are same. So the difference is, in C, int main() can be called with any number of arguments, but int main(void) can only be called without any argument. Although it doesn’t make any difference most of the times, using “int main(void)” is a recommended practice in C.
Why is main void in Java?
As main() method doesn’t return anything, its return type is void. As soon as the main() method terminates, the java program terminates too. Hence, it doesn’t make any sense to return from main() method as JVM can’t do anything with the return value of it. main: It is the name of Java main method.
What is the value of argc?
The value of the argc argument is the number of command line arguments. The argv argument is a vector of C strings; its elements are the individual command line argument strings. The file name of the program being run is also included in the vector as the first element; the value of argc counts this element.
What does argc mean?
What is Getopt?
The getopt() function parses the command-line arguments. Its arguments argc and argv are the argument count and array as passed to the main() function on program invocation. An element of argv that starts with ‘-‘ (and is not exactly “-” or “–“) is an option element.
Recent Posts
Заметка о void в JavaScript и TypeScript
Если вы, до того, как заинтересовались JavaScript, писали на традиционных языках с сильной типизацией, то вы, возможно, знакомы с концепцией void . Это — тип, использование которого сообщает программисту о том, что соответствующие функции и методы при их вызове ничего не возвращают.
Сущность void имеется также в JavaScript и TypeScript. В JS это — оператор. В TS это примитивный тип данных. И там и там void ведёт себя не так, как могли бы ожидать многие из тех, кто сталкивался с void в других языках.
Оператор void в JavaScript
В JavaScript оператор void вычисляет переданное ему выражение. При этом, независимо от того, какое именно выражение вычисляется, void всегда возвращает undefined .
let i = void 2; // i === undefined
Зачем вообще нужен подобный оператор?
Во-первых, надо отметить, что в ранние годы JS-программирования разработчики могли переопределять undefined и записывать в него какое-нибудь своё значение. А вот void всегда возвращает настоящее значение undefined .
Во-вторых — использование оператора void — это интересный способ работы с немедленно вызываемыми функциями:
И всё это — без загрязнения глобального пространства имён:
void function aRecursion(i) < if(i >0) < console.log(i--) aRecursion(i) >>(3) console.log(typeof aRecursion) // undefined
Так как оператор void всегда возвращает undefined и всегда вычисляет переданное ему выражение, в нашем распоряжении оказывается весьма выразительный способ возвращения из функции без возврата какого-то значения, но с вызовом, например, некоего коллбэка:
// возврат чего-то кроме undefined приведёт к аварийной остановке приложения function middleware(nextCallback) < if(conditionApplies()) < return void nextCallback(); >>
Это приводит нас к самому важному способу использования void . Данный оператор представляет собой нечто вроде «поста охраны» приложения. Если некая функция всегда должна возвращать undefined — обеспечить это можно, воспользовавшись оператором void .
button.onclick = () => void doSomething();
Тип данных void в TypeScript
Тип void в TypeScript можно назвать чем-то вроде противоположности типа any . Функции в JavaScript всегда что-то возвращают. Это может быть либо некое заданное программистом значение, либо undefined :
function iHaveNoReturnValue(i) < console.log(i) >// возвращает undefined
Так как JavaScript функции, из которых явным образом ничего не возвращается, всегда возвращают undefined , void в TypeScript является подходящим типом, сообщающим разработчикам о том, что функция возвращает undefined :
declare function iHaveNoReturnValue(i: number): void
Сущность void в виде типа можно ещё использовать для параметров и для любых других объявлений переменных. Единственное значение, которое всегда можно передать void-параметру — это undefined .
declare function iTakeNoParameters(x: void): void iTakeNoParameters() // ОК iTakeNoParameters(undefined) // ОК iTakeNoParameters(void 2) // ОК
В результате оказывается, что в TS типы void и undefined — это почти одно и то же. Но между ними есть одно маленькое различие, которое, на самом деле, чрезвычайно важно. Возвращаемый тип void может быть заменён на другие типы, что позволяет реализовывать продвинутые паттерны работы с коллбэками.
function doSomething(callback: () => void) < let c = callback() //здесь callback всегда возвращает undefined //тип c - тоже undefined >// эта функция возвращает число function aNumberCallback(): number < return 2; >// работает; обеспечивается типобезопасность в doSometing doSomething(aNumberCallback)
Разработчики ожидают от подобных конструкций, часто используемых в JS-приложениях, именно такого поведения. Вот материал на эту тему.
Если вы хотите, чтобы функция принимала бы лишь функции, которые возвращают undefined — вы можете соответствующим образом изменить сигнатуру метода:
// было // function doSomething(callback: () => void) < // стало function doSomething(callback: () =>undefined) < /* . */ >function aNumberCallback(): number < return 2; >// Ошибка - типы не совпадают doSomething(aNumberCallback)
Итоги
Оператор void в JavaScript и тип данных void в TypeScript — сущности довольно простые и понятные. Круг ситуаций, в которых они применимы, ограничен. Однако надо отметить, что программист, который их использует, скорее всего, не столкнётся при работе с ними с какими-то проблемами.
Уважаемые читатели! Пользуетесь ли вы void в JS и TS?