【发布时间】:2014-04-29 03:26:46
【问题描述】:
在Learning Javascript - A Hands-On Guide to the Fundamentals of Modern Javascript的Working with the Attribute Node一章中,作者Tim Wright在第73页说:
删除一个属性就像获取一个属性一样简单。我们只是定位元素节点并使用方法
removeAttribute()将其从那里取出。 如果您尝试删除不存在的属性,则不会引发 Javascript 异常,但最好还是使用我们之前提到的hasAttribute()方法,如清单 4.6.4 所示
清单 4.6.4 用于删除我们图像的类值的 Javascript
if(document.getElementById("pic").hasAttribute("class")) {
document.getElementById("pic").removeAttribute("class");
}
如果两种方式都没有抛出异常,是不是检查它是否存在是多余的?也会出现同样的结果。书中所说的论点是在删除参数之前检查参数可以节省浏览器通过不必要的代码解析,但if(document.getElementById("pic").hasAttribute("class")) {} 本身甚至比document.getElementById("pic").removeAttribute("class"); 更长!
为什么这是最佳做法?
【问题讨论】:
-
我做了性能测试here,如你所说,removeAttribute方法比hasAttribute检查要快。所以在这里为你的问题投票
-
谢谢!一方面...我不知道 jsperf.com!
-
有一个更快的检查,点表示法:jsperf.com/checkattributeornot hasAttribute 和 removeAttribute 都很慢。
-
哇...我今天学到了很多东西!点符号和一切! :D 所以@epascarello 你是说点符号是最好的做法,而不是“检查方法”还是只是删除它?最佳实践是否仅依赖于每秒的操作? Weiwei 说的那些关于元数据和更重的函数调用的事情呢?
-
我并不是说这是“最佳”做法。这是速度的选择。最佳实践是有意见的人说你应该做的事情。
标签: javascript methods conditional-statements