javascript - 为什么在删除之前使用点符号检查属性比直接删除属性更快?

标签 javascript performance dom syntax conditional

我问了this question ,事实证明,当从元素中删除属性时,首先使用 elem.xxx!==undefined 检查元素是否存在可以加快运行时间。 Proof .

为什么它更快?更多的代码要处理,您将不得不遇到 removeAttribute() 方法,无论您采用何种方式。

最佳答案

嗯,首先你需要知道的是 elem.xxxelem.getAttribute() 不同或与该属性相关的任何其他方法。

elem.xxx是DOM元素的属性,而属性和DOM内部HTML上的元素,既相似又不同。例如,以这个 DOM 元素为例:<a href="#">和这段代码:

//Let say var a is the <a> tag
a.getAttribute('href');// == #
a.href;// == http://www.something.com/# (i.e the complet URL)

但让我们采用自定义属性:<a custom="test">

//Let say var a is the <a> tag
a.getAttribute('custom');// == test
a.custom;// == undefined

所以你不能真正比较两者的速度,因为它们没有达到相同的结果。但是一个显然更快,因为属性是一种快速访问数据,而属性使用 get/hasAttribute DOM 函数。

现在,为什么没有条件更快?仅仅因为removeAttribute不关心属性是否丢失,它会检查是否丢失。

所以使用 hasAttribute之前 removeAttribute就像做两次检查,但是条件有点慢,因为它需要检查条件是否满足才能运行代码。

关于javascript - 为什么在删除之前使用点符号检查属性比直接删除属性更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22565494/

相关文章:

javascript - 当 JS 中断时得到通知?

javascript - 使用 AJAX 请求时还需要 Form 元素吗?

performance - Linq 解谜器

jquery - 刷新jquery mobile中动态创建的页面

javascript - jQuery 无法使用 jQuery.appendTo() 识别附加的克隆元素

javascript - 如何使用 AngularJS 从自定义 URL 获取字体?

javascript - ReactJS/Redux/Axios 等待服务器请求完成

sql-server - 为此查询在我的表上添加索引

python-3.x - 将 pandas 中的多个 bool 列融化到单个列中

javascript - $(document).ready(function (){} 以及它如何转换为 HTML