Хотя термины "атрибут" (attribute) и "свойство" (property) часто используются как синонимы, в контексте DOM они имеют важные различия.
Определение: Атрибуты — это части HTML-разметки, которые определяются в тегах элементов.
Характеристики:
getAttribute()
, setAttribute()
Пример:
<input id="username" type="text" value="Гость" data-info="temp">
const input = document.getElementById('username');
console.log(input.getAttribute('value')); // "Гость" (строка)
console.log(input.getAttribute('data-info')); // "temp"
Определение: Свойства — это значения, которые хранятся в DOM-объектах JavaScript.
Характеристики:
Пример:
console.log(input.value); // "Гость" (может быть изменено пользователем)
console.log(input.id); // "username"
console.log(input.type); // "text"
Технология | Автопередача | Доступ из JS | Объем | Безопасность |
---|---|---|---|---|
Cookies | ✅ | ❌ (HttpOnly) | 4KB | Зависит от настроек |
localStorage | ❌ | ✅ | 5-10MB | Только same-origin |
sessionStorage | ❌ | ✅ | 5-10MB | Только сессия |
IndexedDB | ❌ | ✅ | До 50% | Same-origin |
Синхронизация:
input.setAttribute('value', 'Новое');
console.log(input.value); // "Новое" (но не всегда)
Булевы атрибуты:
<button disabled>Кнопка</button>
console.log(button.getAttribute('disabled')); // "" (пустая строка)
console.log(button.disabled); // true
Пользовательские атрибуты (data-*):
dataset
console.log(input.dataset.info); // "temp"
Используйте атрибуты:
Используйте свойства:
<input id="age" type="number" value="30" min="18">
const ageInput = document.getElementById('age');
// Атрибуты
console.log(ageInput.getAttribute('value')); // "30" (строка)
console.log(ageInput.getAttribute('min')); // "18" (строка)
// Свойства
console.log(ageInput.value); // 30 (число, если input type="number")
console.log(ageInput.min); // 18 (число)
ageInput.value = 25; // Изменяет текущее значение, но не атрибут
Атрибуты — это HTML-представление данных, а свойства — их JavaScript-представление в DOM. Понимание различий между ними критически важно для корректной работы с элементами страницы, особенно при динамическом изменении их состояния.