JavaScript

From Wikipedia, the free encyclopedia

JavaScript
Paradigm: multi-paradigm
Appeared in: 1995
Designed by: Brendan Eich
Developer: Netscape Communications Corporation, Mozilla Foundation
Typing discipline: duck typing
Major implementations: SpiderMonkey, Rhino, KJS, JavaScriptCore
Dialects: JScript
Influenced by: Scheme, Self, Perl, Python
JavaScript
File extension: .js
MIME type: application/javascript[1]

JavaScript is the name of Netscape Communications Corporation's and now the Mozilla Foundation's implementation of the ECMAScript standard, a scripting language based on the concept of prototype-based programming. The language is best known for its use in websites (as client-side JavaScript), but is also used to enable scripting access to objects embedded in other applications.

Despite the name, JavaScript is only distantly related to the Java programming language, the main similarity being the common debt to the C syntax. Semantically, JavaScript syntax has far more in common with the Self programming language.

JavaScript is a registered trademark of Sun Microsystems, Inc. It was used under license for technology invented and implemented by Netscape Communications and current entities such as the Mozilla Foundation.[2]

Contents

[edit] History

JavaScript was originally developed by Brendan Eich of Netscape under the name Mocha, later LiveScript, and finally renamed to JavaScript. The change of name from LiveScript to JavaScript roughly coincided with Netscape adding support for Java technology in its Netscape Navigator web browser. JavaScript was first introduced and deployed in the Netscape browser version 2.0B3 in December of 1995. When web developers talk about using JavaScript in Internet Explorer, they are actually using JScript. The choice of name proved to be a source of much confusion.

As of 2006, the latest version of the language is JavaScript 1.7. The previous version 1.6 corresponded to ECMA-262 Edition 3 like JavaScript 1.5, except for Array extras, and Array and String generics. ECMAScript, in simple terms, is a standardized version of JavaScript. The ECMA-357 standard specifies E4X, a language extension dealing with XML.


[edit] Usage

Some JavaScript source-code.
Some JavaScript source-code.

JavaScript is a prototype-based scripting language with a syntax loosely based on C. Like C, the language has no input or output constructs of its own. Where C relies on standard I/O libraries, a JavaScript engine relies on a host environment into which it is embedded. There are many such host environment applications, of which web technologies are the best-known examples. These are examined first.

One major use of web-based JavaScript is to write functions that are embedded in or included from HTML pages and interact with the Document Object Model (DOM) of the page to perform tasks not possible in HTML alone. Some common examples of this usage follow.

  • Opening or popping up a new window with programmatic control over the size, position and 'look' of the new window (i.e. whether or not the menus, toolbars, etc. are visible).
  • validation of web form input values to make sure that they will be accepted before they are submitted to the server.
  • Changing images as the mouse cursor moves over them: This effect is often used to draw the user's attention to important links displayed as graphical elements.

The DOM interfaces in various browsers differ and don't always match the W3C DOM standards. Rather than write different variants of a JavaScript function for each of the many browsers in common use today, it is usually possible, by carefully following the W3C DOM Level 1 or 2 standards, to provide the required functionality in a standards-compliant way that most browsers will execute correctly. Care must always be taken to ensure that the web page degrades gracefully and so is still usable by any user who:

  • has JavaScript execution disabled - for example as a security precaution
  • has a browser that does not understand the JavaScript - for example on a PDA or mobile phone
  • is visually or otherwise disabled and may be using an unusual browser, a speech browser or may have selected extreme text magnification. For more information on this, see the Web Accessibility Initiative

Other examples of JavaScript interacting with a web page's DOM have been called DHTML and SPA.

A different example of the use of JavaScript in web pages is to make calls to web and web-service servers after the page has loaded, depending upon user actions. These calls can obtain new information, which further JavaScript can merge with the existing page's DOM so that it is displayed. This is the basis of Ajax programming.

Outside of the Web, JavaScript interpreters are embedded in a number of tools. Adobe Acrobat and Adobe Reader support JavaScript in PDF files. The Mozilla platform, which underlies several common web browsers, uses JavaScript to implement the user interface and transaction logic of its various products. JavaScript interpreters are also embedded in proprietary applications that lack scriptable interfaces. Dashboard Widgets in Apple's Mac OS X v10.4 are implemented using JavaScript. Microsoft's Active Scripting technology supports JavaScript-compatible JScript as an operating system scripting language. JScript .NET is a CLI-compliant language that is similar to JScript, but has further object oriented programming features. Tools in the Adobe Creative Suite, including Photoshop, Illustrator, and InDesign, allow scripting through JavaScript.

The Java programming language, in version SE 6 (JDK 1.6), introduced the javax.script package that allows any Java application to read, interpret and execute JavaScript scripts at run-time[3][4]. The Java developer can make objects and variables that are part of the host application available to the JavaScript code using a Bindings object. These aspects of the running application can then be accessed and manipulated at run-time from JavaScript in a similar manner to the way that client-side scripts access the DOM of a displayed page in a web browser.[5]

Each of these applications provides its own object model which provides access to the host environment, with the core JavaScript language remaining mostly the same in each application.

[edit] Debugging

JavaScript debugging has some specifics in comparison with stand-alone applications. JavaScript programs usually rely on interaction with the loaded page's Document Object Model (DOM) so errors may be caused by wrong DOM usage in a technically correct script. This makes JavaScript errors difficult to find. However nowadays both Internet Explorer and the Gecko-based browsers come with a reasonably good JavaScript debugger. Gecko browsers use the Venkman debugger or the Firebug debugger for Mozilla Firefox. Opera announced a debugging developer tool in a preview released in February 2007. Client-side JScript in Internet Explorer can be debugged with Microsoft Script Debugger. Microsoft Visual Studio can be used to debug server-side and command-line JScript[6]. Microsoft also provides Microsoft Script Editor (MSE) as part of their Microsoft Office package for scripts embedded in Microsoft Office documents[7]. There are also some free tools such as JSLint, which will scan JavaScript code looking for problems[8], as well as a commercial JavaScript Debugger called SplineTech JavaScript HTML Debugger for Microsoft Windows.

Since JavaScript is interpreted, loosely-typed, and, when run at the client-side, may be hosted in varying environments, applications, implementations and versions, the programmer has to take extra care to make sure the code executes as expected in as wide a range of circumstances as possible, and that functionality degrades nicely when it does not.

Each script block is parsed separately. On web pages where JavaScript in script blocks is mixed with HTML, syntax errors can be identified more readily by keeping discrete functions in separate script blocks, or (for preference), using many small linked .js files. This way, a syntax error will not cause parsing/compiling to fail for the whole page, which can help to enable a dignified death.

[edit] Security

As JavaScript is a rich interpreted language running arbitrary server-provided code on a client computer, it has suffered its fair share of security issues. Many attempts at bypassing logical barriers to steal confidential information make use of JavaScript to perform their deeds behind the scenes, using techniques such as cross-site scripting (XSS). Non-expert users usually can't notice what is going on because the malicious code has no visible effect on their browsing experience. Besides, it is not obvious to people who are not programmers that their Web browser includes a full-blown programming language interpreter, with the power and risks implied.

Java has similar security issues but these are considered less serious because the Java virtual machine provides a well-defined sandboxing model and few Web sites today (as of 2007) require Java, whereas many use JavaScript.

[edit] Related languages

There is no real relationship between Java and JavaScript; their similarities are mostly in basic syntax because both are ultimately derived from C. Their semantics are quite different and their object models are unrelated and largely incompatible. Like C and C++, all Java variables and members are statically typed, whereas all JavaScript variables (as well as object properties and array elements) may hold a value of any type.

To avoid trademark issues, Microsoft named its implementation of the language JScript. JScript was first supported in Internet Explorer version 3.0, released in August 1996.

The standardization effort for JavaScript also needed to avoid trademark issues, so the ECMA 262 standard calls the language ECMAScript, three editions of which have been published since the work started in November 1996. The object model of browser-based JavaScript, the Document Object Model (DOM), is not part of the ECMAScript standard. It is defined in a set of separate standards developed by the W3C, and is applicable to the access and manipulation of HTML and XML documents in many computer languages and platforms.

Microsoft's own VBScript, like JavaScript, can be run client-side in web pages. VBScript has syntax derived from Visual Basic and will only run if the web pages are viewed in Internet Explorer.

ActionScript, the programming language used in Macromedia Flash, is another implementation of the ECMAScript standard.

JSON, or JavaScript Object Notation, is a general-purpose data interchange format that is defined as a subset of JavaScript.

JavaScript OSA (JavaScript for OSA, or JSOSA), is a scripting language for Mac OS based on the Mozilla 1.5 JavaScript implementation, SpiderMonkey. It is a freeware component made available by Late Night Software. Interaction with the operating system and with third-party applications is scripted via a MacOS object. Otherwise, the language is virtually identical to the core Mozilla implementation. It was offered as an alternative to the more commonly used AppleScript language.

ECMAScript was included in the VRML97 standard for scripting nodes of VRML scene description files.

JavaScript is also considered a functional programming language like Scheme and OCaml because it has closures and supports higher-order functions.[9]

[edit] References

  • Nigel McFarlane : Rapid Application Development with Mozilla, Prentice Hall Professional Technical References, ISBN 0-13-142343-6
  • David Flanagan, Paula Ferguson : JavaScript: The Definitive Guide, 4th Edition, O'Reilly & Associates, ISBN 0-596-00048-0
  • David Flanagan : JavaScript: The Definitive Guide, 5th Edition, O'Reilly & Associates, ISBN 0-596-10199-6
  • Danny Goodman, Scott Markel : JavaScript and DHTML Cookbook, O'Reilly & Associates, ISBN 0-596-00467-2
  • Danny Goodman, Brendan Eich : JavaScript Bible, Wiley, John & Sons, ISBN 0-7645-3342-8
  • Andrew H. Watt, Jinjer L. Simon, Jonathan Watt : Teach Yourself JavaScript in 21 Days, Pearson Education, ISBN 0-672-32297-8
  • Thomas A. Powell, Fritz Schneider : JavaScript: The Complete Reference, McGraw-Hill Companies, ISBN 0-07-219127-9
  • Scott Duffy : How to do Everything with JavaScript, Osborne, ISBN 0-07-222887-3
  • Andy Harris : JavaScript Programming, Premier Press, ISBN 0-7615-3410-5
  • Joe Burns, Andree Growney: JavaScript Goodies, Pearson Education, ISBN 0-7897-2612-2
  • Gary B. Shelly, Thomas J. Cashman, William J. Dorin, Jeffrey Quasney : JavaScript: Complete Concepts and Techniques, Course Technology, ISBN 0-7895-6233-2
  • Nick Heinle, Richard Koman : Designing with JavaScript, O'Reilly & Associates, ISBN 1-56592-300-6
  • Sham Bhangal, Tomasz Jankowski : Foundation Web Design: Essential HTML, JavaScript, CSS, PhotoShop, Fireworks, and Flash, APress L. P., ISBN 1-59059-152-6
  • Emily Vander Veer : JavaScript For Dummies, 4th Edition, Wiley, ISBN 0-7645-7659-3
  • Thomas A. Powell, Fritz Schneider : JavaScript: The Complete Reference, McGraw-Hill Companies, ISBN 0-07-219127-9
  1. ^ RFC 4329
  2. ^ http://www.sun.com/suntrademarks/
  3. ^ http://java.sun.com/javase/6/docs/api/javax/script/package-summary.html Javadoc for javax.script package
  4. ^ http://java.sun.com/javase/6/webnotes/index.html#scripting javax.script release notes
  5. ^ Flanagan 5th Edition, Pp 214 et seq
  6. ^ http://msdn2.microsoft.com/en-us/library/bssx024s(VS.80).aspx JScript development in Microsoft Visual Studio
  7. ^ http://msdn2.microsoft.com/en-us/library/aa202668(office.11).aspx JScript development in Microsoft Office 11 (MS InfoPath 2003)
  8. ^ http://www.jslint.com/lint.html JSLint help page
  9. ^ The Little Javascripter shows the relationship with Scheme in more detail.

[edit] See also

Wikibooks
Wikibooks has more about this subject:

[edit] External links