global
IE, Opera, Firefox, and Webkit seem to implement a non-standard element id resolver object. This object is used to retrieve the element. See comp.lang.javscript thread: Why "window.alert()" over "alert()"?, comment by Lasse Reichstein Nielsen.
In some browsers, this behavior depends on the DOCTYPE used.
This is a non-standard behavior of browsers that applies to any element with
an id
, not only form controls.
Assigning to an undeclared identifier should result in a new global property being created, or, if the global/window object has a property with that name, its value should be replaced. However in some browsers, the assigment can result in an error.
The properties of the "element resolver" may appear to be shadowed by properties of the global object, or vice-versa.
The following example should result: undefined, 11.
try { var b1; globalVal = [String(b1)]; // Should be "undefined". b1 = 11; globalVal = globalVal.concat(b1); // Should be ["undefined", 11] } catch(ex) { globalVal = ex.message; }
The following example does not declare a variable. The browser may optionally
resolve the identifier b2
on the element id resolver object.
try { globalVal = [typeof b2]; b2 = 11; // undeclared assignment. globalVal = globalVal.concat(b2); } catch(ex) { globalVal = ex.message; }
The following example should result: undefined, 11.
// remove element id. document.getElementById('b3').id = ''; try { globalVal = [typeof b3]; // should be "undefined". b3 = 11; // undeclared assignment. globalVal = globalVal.concat(b3); } catch(ex) { globalVal = ex.message; }
Declared variables that have not yet been assigned a value create a property
on the Variable object with the value undefined
.
If the element id resolver object exists above the scope of the global object, the identifier will be shadowed by the global variable object.
Firefox:
Opera 9.5:
Safari 2.0.2, 3.1:
MSIE 7
MSIE 6
FORM
Elementsdocument
global
document