YAY. FINALLY. and at the same time, a change is upon us. for the first time in 10 years, javascript is changing. IBM did not vote against ECMA 5 as expected (due to floating point iso issues) so... here are some of the changes coming: Strict mode The introduction of strict mode aims to avoid common coding problems in ECMAScript applications. This is achieved with the presence of a lone string literal in a unit (script or function): "use strict;" This literal will have no effect on existing runtimes, but new runtimes that target version 5 will turn on strict mode for either the entire script (if at the top of the script) or for a single function (if the first part of a function). This allows for a mixture of strict and non-strict code and for an evolution of existing code. So, what does strict mode actually mean? Variables must be declared before use. In other words, i=3 becomes a runtime error; var i=3 is needed (assuming i is not in scope at the time) Eval becomes a reserved word, and introducing new variables through eval cannot occur, so eval("var i=3"); print(i); will now throw an error. Octal literals are no longer used; so 010 is ten, and not eight delete cannot be used against arguments, functions or variables or other properties with the configurable flag set to false with statements, often a source of errors, are no longer used and considered syntax errors Functions can no longer have duplicate arguments with the same name Objects can no longer have duplicate properties with the same name The arguments and caller variables become immutable Access to the global object becomes a runtime error Library extensions Other extensions are also present in the base library: Date now supports the ability to generate ISO8601 formatted dates (such as 20091209T12:34:56Z) as well as to parse them String now has a built-in trim() method A new JSON object with parse and stringify to support efficient generation of JSON data; like eval but without the security implications of being able to reduce code. In addition, any JSONValue can be used, not just JSONObject and JSONArray as specified in RFC 4627. (4627 defines JSON-Text to be constrained to an object or array.) A new bind builtin has been added, with the same semantics as Prototype's bind() Array now has standard functions, such as indexOf(), map(), filter(), and reduce() Object now has seal() (which prevents new properties being added or existing properties deleted) and freeze() (which makes all properties read-only, as well as preventing new properties being added or deleted) Object.keys() lists all the enumerable properties of the object Object.getOwnPropertyNames() lists all the enumerable and non-enumerable properties Object.getPrototypeof() returns the prototype of the given object interesting. in particular i am sure about eval not being able to create variables, even scoped ones (i tend to use it through ajax), although this is a security fix. and my other worry is immutable arguments which will change how i sometimes assign a default value to an argument if false/null... the great wins are native forEach etc, and bind (oh yes!) aside from the boring background on ecma 4 that never was, thoughts? good/bad, won't matter, too many changes, not enough? source: http://www.infoq.com/news/2009/12/ecmascript5