property和attribute区别
“property”(属性)和“attribute”(特性/属性)这两个术语经常被使用,有时可以互换,但在不同语境下有明确的区别
Attribute vs Property 完整总结
核心概念
- Attribute(特性): HTML 标签上的属性
- Property(属性): DOM 对象上的属性
根本区别
| 特性 | Attribute | Property |
|---|---|---|
| 归属 | HTML 标签 | DOM 对象 |
| 值类型 | 总是字符串 | 任意 JS 类型 |
| 大小写 | 不敏感 | 敏感 |
| 操作方式 | getAttribute()/setAttribute() |
点符号操作 |
| 布尔属性 | 存在即为真 | true/false |
操作示例
1 | <input id="myInput" type="text" value="初始值" checked custom-attr="自定义" /> |
1 | // Attribute 操作 |
重要规则
1. 标准属性同步规则
- 初始同步: 页面加载时 property 从 attribute 初始化
- 用户交互后: property 变化,attribute 保持不变
- 程序修改:
- 修改 property → 不影响 attribute
- 修改 attribute → 可能影响 property(取决于时机)
2. value 属性的特殊性
1 | // 特殊行为演示 |
关键点:
- Attribute: 代表 HTML 中设置的默认值
- Property: 代表元素的当前值
- 一旦用户交互,两者”脱钩”
3. 布尔属性处理
1 | <input type="checkbox" checked disabled="disabled" /> |
1 | // Attribute: 存在即为真 |
4. 自定义属性
1 | <div data-id="123" custom-info="hello"></div> |
1 | // 非 data-* 属性 |
最佳实践
操作当前状态 → 使用 Property
1
2
3
4
5
6
7// ✅ 正确
input.value = "新值";
checkbox.checked = true;
select.selectedIndex = 0;
// ❌ 避免
input.setAttribute("value", "新值");获取初始默认值 → 使用 Attribute
1
const defaultValue = input.getAttribute("value");
操作自定义属性
data-*属性 → 使用dataset- 其他自定义属性 → 使用
getAttribute/setAttribute
表单处理始终用 Property
1
2
3// 获取用户输入
const userInput = input.value; // ✅
const userInput = input.getAttribute("value"); // ❌
记忆口诀
“HTML 写的是 Attribute,JS 用的是 Property;
用户交互看 Property,初始值找 Attribute;
布尔值要用 Property,自定义的用 Attribute。”
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 YianNotes!

