JavaScript/Debugging

Previous: Metaprogramming Index Next: DHTML

JavaScript DebuggersEdit

FirebugEdit

  • Firebug is a powerful extension for Firefox that has many development and debugging tools including JavaScript debugger and profiler.

Venkman JavaScript DebuggerEdit

Internet Explorer debuggingEdit

Safari debuggingEdit

Safari includes a powerful set of tools that make it easy to debug, tweak, and optimize a website for peak performance and compatibility. To access them, turn on the Develop menu in Safari preferences. These include Web Inspector, Error Console, disabling functions, and other developer features. The Web Inspector gives you quick and easy access to the richest set of development tools ever included in a browser. From viewing the structure of a page to debugging JavaScript to optimizing performance, the Web Inspector presents its tools in a clean window designed to make developing web applications more efficient. To activate it, choose Show Web Inspector from the Develop menu. The Scripts pane features the powerful JavaScript Debugger in Safari. To use it, choose the Scripts pane in the Web Inspector and click Enable Debugging. The debugger cycles through your page’s JavaScript, stopping when it encounters exceptions or erroneous syntax. The Scripts pane also lets you pause the JavaScript, set breakpoints, and evaluate local variables.[1]

JTF: Javascript Unit Testing FarmEdit

  • JTF is a collaborative website that enables you to create test cases that will be tested by all browsers. It's the best way to do TDD and to be sure that your code will work well on all browsers.

jsUnitEdit

built-in debugging toolsEdit

Some people prefer to send debugging messages to a "debugging console" rather than use the alert() function[2][3][4]. Following is a brief list of popular browsers and how to access their respective consoles/debugging tools.

  • Firefox: Ctrl+Shift+K opens an error console.
  • Opera (9.5+): Tools >> Advanced >> Developer Tools opens Dragonfly.
  • Chrome: Ctrl+Shift+J opens chrome's "Developer Tools" window, focused on the "console" tab.
  • Internet Explorer: F12 opens a firebug-like web development tool that has various features including the ability to switch between the IE8 and IE7 rendering engines.
  • Safari: Cmd+Alt+C opens the WebKit inspector for Safari.

Common MistakesEdit

  • Carefully read your code for typos.
  • Be sure that every "(" is closed by a ")" and every "{" is closed by a "}".
  • Trailing commas in Array and Object declarations will throw an error in Microsoft Internet Explorer but not in Gecko-based browsers such as Firefox.
    // Object
    var obj = {
      'foo'   : 'bar',
      'color' : 'red', //trailing comma
    };
 
    // Array
    var arr = [
      'foo',
      'bar', //trailing comma
    ];
  • Remember that JavaScript is case sensitive. Look for case related errors.
  • Don't use Reserved Words as variable names, function names or loop labels.
  • Escape quotes in strings with a "\" or the JavaScript interpreter will think a new string is being started, i.e:
alert('He's eating food'); should be
alert('He\'s eating food'); or
alert("He's eating food");
  • When converting strings to numbers using the parseInt function, remember that "08" and "09" (e.g. in datetimes) indicate an octal number, because of the prefix zero. Using parseInt using a radix of 10 prevents wrong conversion. var n = parseInt('09',10);
  • Remember that JavaScript is platform independent, but is not browser independent. Because there are no properly enforced standards, there are functions, properties and even objects that may be available in one browser, but not available in another, e.g. Mozilla / Gecko Arrays have an indexOf() function; Microsoft Internet Explorer does not.

Debugging MethodsEdit

Debugging in Javascript doesn't differ very much from debugging in most other programming languages. See the article at Computer programming/debugging.

Following Variables as a Script is RunningEdit

The most basic way to inspect variables while running is a simple alert() call. However some development environments allow you to step through your code, inspecting variables as you go. These kind of environments may allow you to change variables while the program is paused.

Browser BugsEdit

Sometimes the browser is buggy, not your script. This means you must find a workaround.

Browser bug reports

browser-dependent codeEdit

Some advanced features of Javascript don't work in some browsers.

Too often our first reaction is: Detect which browser the user is using, then do something the cool way if the user's browser is one of the ones that support it. Otherwise skip it.

Instead of using a "browser detect", a much better approach is to write "object detection" Javascript to detect if the user's browser supports the particular object (method, array or property) we want to use.[5] [6]

To find out if a method, property, or other object exists, and run code if it does, we write code like this:

var el = null;
if (document.getElementById) {
    // modern technique
    el = document.getElementById(id);
} else if (document.all) {
    // older Internet Explorer technique
    el = document.all[id];
} else if (document.layers) {
    // older Netscape web browser technique
    el = document.layers[id];
}

For further readingEdit

  1. http://www.apple.com/safari/features.html#developer
Previous: Metaprogramming Index Next: DHTML
Last modified on 5 March 2013, at 03:17