HTML5 数据属性将 null 和 undefined 转换为字符串



考虑以下来自HTML文件的示例代码:

 <div id="book"
     data-id="47909"
     data-title="Under The Dome" 
     data-author="Stephen King"
     data-year="2009">
 </div>

使用以下命令选择书籍元素:

book = document.querySelector("#book");

每当我将某个属性设置为 nullundefined 时,它都会分别将其设置为字符串"null"、"undefined":

book.dataset.author = null
typeof book.dataset.author
"string"
book.dataset.year = undefined
typeof book.dataset.year
"string"

let a = null;
typeof a
"object"
let b = undefined;
typeof b
"undefined"

有人可以解释一下为什么它的行为是这样的吗?这是否与最终所有内容都将转换为字符串这一事实有关,因为它是元素属性的性质?

谢谢!

根据

数据集的规范

在获取时,数据集 IDL 属性必须返回一个 DOMStringMap,其 关联的元素就是这个元素。

并根据 DOMString 的价值规格

属性具有命名空间(null 或非空字符串(、命名空间 前缀(空或非空字符串(、本地名称(非空字符串(、 值(字符串(和元素(null 或元素(。

因此,该值在返回之前被强制转换为字符串

String(null); //"null"
String(undefined); //"undefined"
String(1); //"1"

来自文档

HTMLElement.dataset属性允许在读取和 写入模式,到上设置的所有自定义数据属性 (data-*( 元素,无论是在 HTML 中还是在 DOM 中。 这是一张 DOMString 的地图,一个 每个自定义数据属性的条目。

实质上,这意味着所有属性都强制转换为字符串。

String(null)
// 'null'
String(undefined)
// 'undefined'

点 - 1:在下面,你把值null

book.dataset.author = null

这意味着您所做的值是null,但默认情况下,对于 HTML 数据类型为 String 的数据集,数据类型是String的。

点 - 2:在下面的代码中

let a = null;

值是null,但数据类型取决于 JavaScript 中的值,所以只要值默认为空,它就是一个Object

最新更新