标准答案

  1. data-* 是 HTML 自定义数据属性,浏览器会保留在 DOM 上,JavaScript 可以通过 dataset 读取。
  2. 它适合存少量和当前元素强相关的数据,例如埋点标识、组件模式、行 id 或声明式初始化参数。
  3. 它不适合存 token、手机号、邮箱、权限详情等敏感信息,因为用户可以直接在 DOM 中看到。
  4. 复杂对象、频繁变化的状态和大量数据不应该塞进 data-*,更适合放在应用状态、接口数据或脚本变量中。
  5. 命名时使用 data-user-id 这类短横线形式,读取时对应 element.dataset.userId。

题目解析

这题要讲清 data-* 是 DOM 上的公开属性,不是安全存储。

它的价值在于让 HTML 和少量脚本行为解耦,适合轻量标记,不适合承担状态管理。

代码示例

dataset 会把 data-user-id 映射成 userId。

HTML
<button data-user-id="42" data-action="follow">
  关注
</button>

<script>
  const button = document.querySelector('button')
  console.log(button.dataset.userId)
  console.log(button.dataset.action)
</script>

常见误区

  • 把 data-* 当成安全存储,把 token 或权限明细写进 DOM。
  • 把完整 JSON 大对象塞进属性,导致 HTML 臃肿且转义困难。
  • 状态变化后只改 JS 状态,不同步 DOM 属性,却又继续从 dataset 读取旧值。

作者信息