JavaScript for C# programmers: void

A very short, sweet post in the series for C# developers learning JavaScript.

In this episode, we look into the void.

In C#, void is a type that has no values. We talk of a method returning void, when we actually mean the method doesn’t return anything — it’s a procedure and not a function. Well in JavaScript, all functions and methods return something and if you don’t explicitly use the return keyword, the function returns undefined. If you run the following code in Firebug, you’ll get "return type is undefined" displayed.

var testFunc = function(a) {
    console.log(typeof a);
}
console.log("return type is " + typeof testFunc(42));

Cool, eh? So,, what does this have to do with void? Well, void is an operator taking a single parameter, and that returns undefined. The parameter can be any type, including undefined.

console.log("return type is " + typeof void("whaaa?"));

So, why exactly is this useful? Well, it isn’t really. People use void(0) as a kind of placeholder for anchor links when they don’t want to use the anchor link, but to instead attach an onclick handler for the <a> element. The browser won't reload the page if the link evaluates to false; it's as if the link were dead. Stuff that, use "#" instead, or use a real link in case the end-user has JavaScript turned off. (This philosophy is usually known as unobtrusive JavaScript: the site ‘works’ if JavaScript is turned off, but gives a better experience if it is turned on. Using void(0) as a link assumes JavaScript is turned on.)

As Douglas Crockford says, succinctly: Avoid void.

Album cover for Platinum & Gold Collection: The Alan Parsons Project Now playing:
The Alan Parsons Project - Eye in the Sky
(from Platinum & Gold Collection: The Alan Parsons Project)


Loading similar posts...   Loading links to posts on similar topics...

1 Response

#1 Dew Drop - February 17, 2009 | Alvin Ashcraft's Morning Dew said...
17-Feb-09 8:26 AM

Pingback from Dew Drop - February 17, 2009 | Alvin Ashcraft's Morning Dew

Leave a response

Note: some MarkDown is allowed, but HTML is not. Expand to show what's available.

  •  Emphasize with italics: surround word with underscores _emphasis_
  •  Emphasize strongly: surround word with double-asterisks **strong**
  •  Link: surround text with square brackets, url with parentheses [text](url)
  •  Inline code: surround text with backticks `IEnumerable`
  •  Unordered list: start each line with an asterisk, space * an item
  •  Ordered list: start each line with a digit, period, space 1. an item
  •  Insert code block: start each line with four spaces
  •  Insert blockquote: start each line with right-angle-bracket, space > Now is the time...
Preview of response