html属性(attribute)是标签中定义的初始信息,dom属性(property)是元素对象在内存中的实时状态;二者非一一对应,需区分使用以确保交互可靠性。

能,但不是“提升性能”,而是让 JS 交互更可靠、更少出错——前提是用对属性、分清 attribute 和 property。
data-* 属性是唯一推荐的自定义数据通道
它被浏览器原生支持,自动映射到 dataset,不会干扰语义,也不触发重排。
- HTML 写
<button data-item-id="456" data-action="archive">归档</button>,JS 里直接读el.dataset.itemId(自动转驼峰)或el.dataset.action - 别用
setAttribute('data-xxx', ...)手动设,优先走el.dataset.xxx = 'val',否则可能不同步 -
dataset值永远是字符串,数字要自己parseInt(el.dataset.count),别直接参与计算 - 别存大段 JSON:
data-config='{"a":1,"b":2}'看似方便,但每次读都要JSON.parse(),出错难定位
disabled/checked/hidden 这类布尔属性,千万别混用 setAttribute 和 property
它们的 attribute 是“初始快照”,property 才是“当前状态”。混用会导致 UI 和 JS 判断不一致。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 运行时一律操作 property:
el.disabled = true、el.checked = false、el.hidden = true -
hidden是例外:没有对应 property,必须用el.toggleAttribute('hidden')或el.removeAttribute('hidden') - 检查状态时,用
el.disabled(当前是否禁用),别用el.hasAttribute('disabled')(HTML 里有没有写这个属性) - 初始化可以写 HTML 属性:
<input disabled>,DOM 会自动同步到.disabled = true
formaction、formmethod 等表单覆盖属性能直接替代 JS 提交逻辑
很多按钮点击后发请求,其实根本不用写 addEventListener + fetch,浏览器原生就支持。
- 把多个操作按钮包进一个
<form></form>(不用name或id),各按钮设type="submit"+formaction="/api/delete"+formmethod="POST" - JS 只监听
form.addEventListener('submit', e => { e.preventDefault(); ... }),再用e.submitter判断点的是哪个按钮 - 这样天然支持回车提交、Ctrl+Enter、禁用 JS 时降级为页面跳转,还省掉 N 个事件监听器
- 注意:
formaction的 URL 是相对当前页面的,不是相对于form的action属性
真正容易被忽略的点,是 HTML 属性不是 JS 的“辅助工具”,而是定义了 JS 可信边界——哪些值是初始化时确定的、哪些状态变化会触发浏览器行为、哪些修改会引发重排。一旦把 setAttribute 当万能钥匙乱用,问题往往出现在看不见的地方。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










