hasAttribute()是判断DOM元素是否显式声明某属性的标准方法,返回布尔值;语法为element.hasAttribute('属性名'),仅检测HTML标签中是否存在该属性,不反映运行时状态,适用于所有标准及自定义属性。

直接用 hasAttribute() 方法就能准确判断一个 DOM 元素是否在 HTML 标签中**显式声明了某个属性**,它返回布尔值,语义清晰、兼容性好(IE9+ 支持),是标准推荐方式。
怎么用 hasAttribute() 检查属性是否存在
调用语法很简单:element.hasAttribute('属性名'),传入字符串形式的属性名,返回 true 或 false:
-
input.hasAttribute('required')→ 检查是否写了required属性(哪怕写成required=""也返回 true) -
div.hasAttribute('data-id')→ 检查是否有自定义数据属性data-id -
img.hasAttribute('alt')→ 即使alt="",只要标签里写了alt就返回 true -
button.hasAttribute('disabled')→ 不管值是disabled、disabled=""还是空字符串,只要存在该属性就为 true
注意区分 attribute 和 property
hasAttribute() 只检测 HTML 标签中是否写了这个属性,不反映 JS 运行时的状态。比如:
-
checkbox.hasAttribute('checked')判断的是 HTML 里有没有checked这个词,跟当前是否勾选无关 -
checkbox.checked才是获取当前实际勾选状态(布尔值) - 对
id、class、href等反射属性,两者常一致;但对checked、selected、hidden等,行为完全不同
为什么不用 getAttribute() 或 jQuery 的 prop() 来判断存在性
getAttribute() 返回的是属性值或 null,不能靠真假值可靠判断存在性:
立即学习“Java免费学习笔记(深入)”;
-
element.getAttribute('disabled')可能返回""、"disabled"或null,空字符串是真值,容易误判 - jQuery 中
.attr('title') !== undefined可以用,但.prop()是操作 DOM 属性状态的,不是判断 HTML 属性是否存在 - hasAttribute() 专为此设计,逻辑单一、结果明确,无需额外判断
常见适用场景
适用于所有标准属性和自定义属性,包括:
- HTML 布尔属性:
disabled、required、readonly、hidden - 数据属性:
data-id、data-user-type - 通用属性:
class、id、title、src、href


















