这个功能来源于 IE,后来firefox 和 chrome 也支持了。现在是 w3c 非正式的标准,不建议使用。
这个可以是id,input的name等,有一定的限制,浏览器兼容问题。
是不规范操作。
首先要知道什么是Browser对象
BOM:Browser Object Model,即浏览器对象模型,提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。
Browser对象:指BOM提供的多个对象,包括:Window、Navigator、Screen、History、Location等。
其中Window对象为顶层对象,其他对象都为Window对象的子对象。
如果在HTML文档中用id属性为元素命名,并且如果Window对象没有此名字的属性,Window对象会赋予一个属性,它的名字是id属性的值,而他们的值指向表示文档元素的HTMLElement对象。在客户端JavaScript中,Window对象是以全局对象的形式存在于作用域链的最上层,这就意味着在HTML文档中使用的id属性会成为可以被脚本访问的全局变量。如果文档包含一个<div id="okay"></div>元素,可以通过全局变量okay来引用此元素。但是,有一个重要警告:如果Window对象已经具有此名字的属性,这就不会发生。比如,id是“history”、“location”、或“navigator”的元素,就不会以全局的形式出现,因为这些ID已经占用了。同样,如果HTML文档包含一个id为“x”的元素,并且还在代码中声明并赋值给全局变量x,那么显式声明的变量会隐藏隐式的元素变量。如果脚本中的变量声明出现在命名元素之前,那这个变量的存在就会阻止元素获取它的window属性。而如果脚本中的变量声明出现在命名元素之后,那么变量的显式赋值会覆盖该属性的隐式值。
可以参考JavaScript权威指南14.7章【作为Window对象属性的文档元素】