IDL
IDL (接口定义语言) 是一种通用语言,用于指定与任何特定编程语言无关的对象接口。
内容与 IDL 属性
在 HTML 中,大多数属性有两个方面:内容属性和IDL 属性。
内容属性是您从内容(HTML 代码)中设置的属性,您可以使用 element.setAttribute()
或 element.getAttribute()
设置或获取它。内容属性始终是字符串,即使预期值应该是整数。例如,要使用内容属性将 <input>
元素的 maxlength
设置为 42,您必须在该元素上调用 setAttribute("maxlength", "42")
。
IDL 属性也称为 JavaScript 属性。这些是您可以使用 JavaScript 属性(如 element.foo
)读取或设置的属性。IDL 属性始终会使用(但可能会转换)底层内容属性在您获取它时返回一个值,并且在您设置它时会将一些内容保存在内容属性中。换句话说,IDL 属性本质上反映了内容属性。
大多数情况下,IDL 属性会以它们实际使用的方式返回其值。例如,<input>
元素的默认 type
为 "text",因此如果您设置 input.type="foobar"
,则 <input>
元素将是文本类型(在外观和行为上),但 "type" 内容属性的值将为 "foobar"。但是,type
IDL 属性将返回字符串 "text"。
IDL 属性并不总是字符串;例如,input.maxlength
是一个数字(有符号长整数)。使用 IDL 属性时,您读取或设置所需类型的数值,因此 input.maxlength
始终会返回一个数字,并且在您设置 input.maxlength
时,它需要一个数字。如果您传递其他类型,则会根据标准 JavaScript 类型转换规则自动将其转换为数字。
IDL 属性可以 反映其他类型,如无符号长整数、URL、布尔值等。不幸的是,没有明确的规则,IDL 属性与其对应的内容属性一起工作的行为方式取决于属性。大多数情况下,它会遵循 规范中规定的规则,但有时它不会。HTML 规范试图使这尽可能地对开发者友好,但由于各种原因(主要是历史原因),某些属性的行为很奇怪(例如 select.size
),您应该阅读规范以了解它们的具体行为方式。