js DOM 元素ID就是全局变量


Posted in Javascript onSeptember 20, 2012

标准规范

HTML5规范文档中指出:如果一个元素符合下面两条规则中的任一条,则window对象中必须要有与之对应的一个属性,属性值就是这个对象.

  • 如果一个元素拥有ID属性,那么ID属性的属性值就会成为window对象的属性名.
  • 如果一个元素拥有name属性,那么name属性的属性值就会成为window对象的属性名.但这个元素的标签名必须是: a, applet, area, embed, form, frame, frameset, iframe, img, object,其中的一个.

让我们看一个例子.假定存在一个页面,该页面包含了一个ID属性为“foo”的div元素:

<div id="foo"></div>

这样一来,上面的的div元素就可以通过window.foo(和其他的window属性一样),或者全局变量foo来访问到.比如,在Chrome控制台中,你可以这样做:
> "foo" in window 
true 
> foo 
<div id="foo"></div>

Firefox

火狐(14)的工作方式略有不同.

> "foo" in window 
false 
> typeof foo // 这个全局变量到底有木有? 
object 
//错误控制台输出了下面的警告.//Element referenced by ID/NAME in the global scope. 
//Use W3C standard document.getElementById() instead. > foo 
[object HTMLDivElement] 
//错误控制台输出了下面的警告.//Element referenced by ID/NAME in the global scope. 
//Use W3C standard document.getElementById() instead.> "foo" in window true
> "foo" in window
false
> typeof foo  // 这个全局变量到底有木有?
object
//错误控制台输出了下面的警告.//Element referenced by ID/NAME in the global scope.
//Use W3C standard document.getElementById() instead.
> foo
[object HTMLDivElement]
//错误控制台输出了下面的警告.//Element referenced by ID/NAME in the global scope.
//Use W3C standard document.getElementById() instead.> "foo" in window true

这到底是怎么一回事?初始化时,window并没有属性foo.但在第一次访问这个属性的时候(通过window.foo属性直接访问或者通过全局变量foo来访问都可以),它会被自动建立.

译者注:我在Firefox14,15,18中都没有发现警告,不过在Firefox12试验时,的确有警告.

js DOM 元素ID就是全局变量

[注意:例子中的代码只能在网页中通过script标签运行才能见效,不能通过终端运行.这是因为终端在处理全局对象时,使用了不同的方式.]

译者注:我在Firebug中尝试例子中的代码,并没发现有什么差别.

一旦你尝试读取foo的值,虽然会正常返回那个div元素,但同时错误控制台会有警告,告诉你不应该那么做.很显然,这样的警告是正确的:在终端调试的时候,你可以使用这个特性,但在实际的代码中,不应该使用.

Cody Lindley写了一个jsPerf测试来比较通过全局变量访问foo和通过window.foo来访问foo的性能差别.有趣的是,只有在Firefox中访问window.foo更快点.

Javascript 相关文章推荐
监控 url fragment变化的js代码
Apr 19 Javascript
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
Jan 11 Javascript
利用JS来控制键盘的上下左右键(示例代码)
Dec 14 Javascript
Jquery轮播效果实现过程解析
Mar 30 Javascript
js无提示关闭浏览器窗口的两种方法分析
Nov 06 Javascript
老生常谈jacascript DOM节点获取
Apr 17 Javascript
vue2.0实现导航菜单切换效果
May 08 Javascript
vuejs父子组件之间数据交互详解
Aug 09 Javascript
Windows安装Node.js报错:2503、2502的解决方法
Oct 25 Javascript
在vue中使用公共过滤器filter的方法
Jun 26 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
Dec 02 Javascript
vue实现前端分页完整代码
Jun 17 Javascript
JavaScript NaN和Infinity特殊值 [译]
Sep 20 #Javascript
JavaScript 更严格的相等 [译]
Sep 20 #Javascript
JavaScript 反科里化 this [译]
Sep 20 #Javascript
Array.prototype.concat不是通用方法反驳[译]
Sep 20 #Javascript
JavaScript 用Node.js写Shell脚本[译]
Sep 20 #Javascript
一个简单的网站访问JS计数器 刷新1次加1次访问
Sep 20 #Javascript
javascript分页代码(当前页码居中)
Sep 20 #Javascript
You might like
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
async和DOM Script文件加载比较
2014/07/20 PHP
php检测数组长度函数sizeof与count用法
2014/11/17 PHP
PHP输出两个数字中间有多少个回文数的方法
2015/03/23 PHP
thinkphp框架下404页面设置 仅三步
2016/05/14 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
25个优雅的jQuery Tooltip插件推荐
2011/05/25 Javascript
跨浏览器通用、可重用的选项卡tab切换js代码
2011/09/20 Javascript
异步动态加载JS并运行(示例代码)
2013/12/13 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
jquery获取css的color值返回RGB的方法
2015/12/18 Javascript
详解JavaScript时间格式化
2015/12/23 Javascript
基于JS实现bookstore静态页面的实例代码
2017/02/22 Javascript
AngularJS ionic手势事件的使用总结
2017/08/09 Javascript
简单的Vue SSR的示例代码
2018/01/12 Javascript
JS实现的小火箭发射动画效果示例
2018/12/08 Javascript
Jquery的Ajax技术使用方法
2019/01/21 jQuery
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
2019/02/02 NodeJs
JsonProperty 的使用方法详解
2019/10/11 Javascript
聊聊vue 中的v-on参数问题
2021/01/29 Vue.js
[42:25]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第三场
2018/04/06 DOTA
学习python的几条建议分享
2013/02/10 Python
在Windows8上的搭建Python和Django环境
2014/07/03 Python
用Python进行行为驱动开发的入门教程
2015/04/23 Python
Python3实现抓取javascript动态生成的html网页功能示例
2017/08/22 Python
Python读取csv文件分隔符设置方法
2019/01/14 Python
详解python pandas 分组统计的方法
2019/07/30 Python
Django 源码WSGI剖析过程详解
2019/08/05 Python
python使用requests.session模拟登录
2019/08/09 Python
8段用于数据清洗Python代码(小结)
2019/10/31 Python
简单了解为什么python函数后有多个括号
2019/12/19 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
Python 为什么推荐蛇形命名法原因浅析
2020/06/18 Python
大学毕业生个人自荐信范文
2014/01/08 职场文书
销售主管岗位职责
2014/02/08 职场文书
毕业晚宴祝酒词
2015/08/11 职场文书