在我看来,你的假设是绝对正确的。我认为书中的“建议”有点灾难性(用一个戏剧性的术语)。以前从未听说过这种“最佳实践”。使用绝对无法实现任何目标element.hasAttribute
在删除/更改属性之前但会减慢代码速度。浏览器并没有神奇地有一个属性查找列表来检查它们是否存在,但在设置或获取属性时不会使用该列表。它may在作者看来,这是生产的最佳实践readable and 可以理解的不过,代码。
此外,我认为你永远不应该使用setAttribute
根本!使用setAttribute
只有这样,才没有内置的标准方法来获取或设置某个属性。这里class
有问题,使用
element.className = 'myclass';
代替
element.setAttribute('class', 'myclass');
浏览器在使用这种标准化方法时已经优化了例程。如果在向元素分配或删除属性时未使用该属性,则浏览器必须弄清楚它是什么类型的属性,并且之后可能会触发特殊操作 - 并非每次都需要。
您可以检查浏览器是否支持特定的属性方法,如下所示
if (typeof window.document.body.className === 'string') {
//className is supported for node elements
}
大多数属性方法的行为类似于 getter 和 setter。您可以阅读和写作,并且使用某些方法甚至比其他方法更有效。例子 :
element.outerHTML = '';
清理的内存比
element = null;
它当然不是元素的属性,而是为了说明为什么人们应该更喜欢使用针对元素特定部分的内置方法。
有很多很多标准方法,例如element.className
您可以用于定位特定的标准属性。它们大多以驼峰命名法命名为属性名称。使用setAttribute
only对于您自己的自定义属性,例如
element.setAttribute('data-my-custum-attribute', 'hello');
根据 HTML5 标准,这是完全合法的标记。或者,如果浏览器不支持某种属性方法,则将其用作后备。对于非常旧的浏览器可能会出现这种情况。不过IE6也支持className
.
我会推荐两本我认为对于深入理解 javascript 非常有价值的书(并不是说我完全理解了,但这些书对我帮助很大):
Javascript - 好的部分 http://shop.oreilly.com/product/9780596517748.do,道格拉斯·克罗克福德
JavaScript 忍者的秘密 https://rads.stackoverflow.com/amzn/click/com/193398869X,作者:John Resig(jQuery 背后的人)
买书吧!它们是黄金,可以作为您办公桌上的参考。