data-* 属性必须用短横线分隔单词,浏览器自动转为 camelcase 供 dataset 使用;dataset 是读写首选,仅支持字符串,禁存敏感或大量数据,非框架状态管理方案。
data-* 属性必须用连字符分隔单词
HTML5 允许在任意元素上添加以 data- 开头的自定义属性,但命名有硬性规则:不能包含大写字母、不能用下划线或驼峰,必须用短横线(-)连接单词。比如 data-user-id 合法,data_userId 或 dataUserId 都会被浏览器忽略或无法通过标准 API 正确读取。
浏览器会自动把短横线命名转为 camelCase 形式供 JavaScript 使用,所以 data-last-login-time 在 JS 中对应 dataset.lastLoginTime。
dataset API 读写 data 属性最可靠
不要用 getAttribute() 或 setAttribute() 直接操作 data-*,虽然能写入,但 dataset 才能自动处理命名转换和类型映射。
-
element.dataset.fooBar读取data-foo-bar的值(字符串) -
element.dataset.fooBar = "123"写入后,DOM 中会自动同步为data-foo-bar="123" - 写入
null或undefined会移除该属性;写入数字/布尔值会被自动转成字符串 - 不支持嵌套对象或数组——
dataset只存字符串,复杂数据得自己JSON.stringify()和JSON.parse()
data 属性不适合存大量或敏感数据
data-* 是为组件状态、标识、轻量上下文设计的,不是存储层: