getElementById和简单地使用元素的ID作为变量有什么区别?

Bea*_*com 3 javascript dom reference

有人能告诉我调用id ="myDomObect"的HTML元素之间的区别吗?:

var myObj = document.getElementById('myDomObect');
Run Code Online (Sandbox Code Playgroud)

&

var myObj = myDomObect;
Run Code Online (Sandbox Code Playgroud)

use*_*740 7

使用第一个表单 jQuery等包装器.第二种形式,

var myObj = myDomObect;
Run Code Online (Sandbox Code Playgroud)

转换为

var myObj = window["myDomObect"];
Run Code Online (Sandbox Code Playgroud)

这是"有效的",因为旧的黑客将ID作为全球窗口属性暴露出来(IIRC从一开始就是一种错误),因此我们仍然很幸运20年后的行为......是的,它起作用在最新的Chrome中.

然而,这样的速记应用于多种原因:

  1. 它不会像最初用"严格模式"那样工作(但它可以用于第二种形式)

  2. 它不传达操作 - 即请求/获取DOM元素(通过ID).

  3. 它不适用于与窗口属性冲突的ID; 例如.<div id=history></div>如果以这种方式访问​​将导致"意外行为".(这不会影响正确使用var函数中的局部变量的getElementById代码.)

  4. 当文档中存在重复的ID(其行为没有定义允许); getElementById的行为已由DOM 4 编写:"getElementById(elementId)方法必须以树的顺序返回第一个元素[带有ID]."


也可以看看: