When referring to elements in HTML forms I often use the name/value of the name attribute. So, if the name of the form is "form01", I refer to the form writing document.forms.form01. Here is an example:
let title = document.forms.form01.title;
console.log(title.value);
<form name="form01">
<input type="text" name="title" value="Hello World">
</form>
The document.forms is a HTMLCollection, but in the documentation for the DOM Standard #interface-htmlcollection it says nothing about the possibility of using a name directly as a property (I think it is called a "named property") on a collection like that -- like when I use document.forms.form01 to refer to the form element. On the contrary the documentation actually notes that this is "a historical artifact" -- so, should I avoid using it?
Can you help me find documentation for this? Either that it is a (nice) feature that can be used or that it is something that should be avoided.
If it's not marked as a deprecated or obsolete feature, you absolutely can continue to use it!
Additional detail on MDN Web Docs about HTMLCollection states the following:
The
HTMLCollectioninterface represents a generic collection (array-like object similar to arguments) of elements (in document order) and offers methods and properties for selecting from the list.
As for named properties in HTMLCollection (as @Kaiido pointed out), this section states:
The supported property names are the values from the list returned by these steps:
Let result be an empty list.
For each element represented by the collection, in tree order:
If element has an ID which is not in result, append element’s ID to result.
If element is in the HTML namespace and has a
nameattribute whose value is neither the empty string nor is in result, append element’snameattribute value to result.Return result.
Also note that NodeList falls under the same section (Old-style collections) as HTMLCollection. See NodeList on MDN Web Docs.
The previous mention of [LegacyUnenumerableNamedProperties] (as @Kaiido pointed out) only indicates that the named properties are unenumerable (i.e., using Array.from will only return the index items).