Element.attributes
более широко поддерживается;он был реализован в Chrome 26 (начало 2013 года) и поддерживается в IE11.Напротив, getAttributeNames
гораздо более поздний: Chrome 61 (середина 2017 года) без поддержки IE.(реализация среди других браузеров находится на аналогичном временном интервале.)
Другое отличие состоит в том, что getAttributeNames
возвращает массив, что может быть удобно, потому что вы можете использовать методы массива для него, например
elm.getAttributeNames().forEach((name) => {
// do something
});
в отличие от
Array.prototype.forEach.call(
elm.attributes,
(name) => {
// do something
}
);
(или распространение .attributes
: [...elm.attributes]
, хотя для этого требуется создать дополнительный промежуточный массив)
Также обратите внимание, что .attributes
возвращаетмассивоподобный объект, который содержит и имена узлов и значения узлов, тогда как массив getAttributeNames
содержит только имена узлов.
Чтобы использовать getAttributeNames
в старых браузерах, убедитесь, чтовключить полифилл .