Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTML5数据属性将null和未定义转换为字符串_Javascript_Html_Casting_Null_Undefined - Fatal编程技术网

Javascript HTML5数据属性将null和未定义转换为字符串

Javascript HTML5数据属性将null和未定义转换为字符串,javascript,html,casting,null,undefined,Javascript,Html,Casting,Null,Undefined,考虑下面来自HTML文件的示例代码: <div id="book" data-id="47909" data-title="Under The Dome" data-author="Stephen King" data-year="2009"> </div> 每当我将某个属性设置为null或undefined时,它会分别将其设置为字符串“null”、“undefined”: book.dataset.author = nul

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

 <div id="book"
     data-id="47909"
     data-title="Under The Dome" 
     data-author="Stephen King"
     data-year="2009">
 </div>
每当我将某个属性设置为
null
undefined
时,它会分别将其设置为字符串“null”、“undefined”:

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

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

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

谢谢

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

本质上,这意味着所有属性都转换为字符串

String(null)
// 'null'
String(undefined)
// 'undefined'
依照

获取时,dataset IDL属性必须返回其 关联的元素就是这个元素

根据

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

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

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

第1点:在下面,您将值设置为
null

book.dataset.author = null
这意味着您将值设置为
null
,但默认情况下,对于HTML中的数据集,数据类型为
String

第2点:在下面的代码中

let a = null;

值为
null
,但数据类型取决于JavaScript中的值,因此,无论何时默认值为null,它都是
对象

属性值只能是字符串。它可能正在将
null
undefined
转换为
String(null)
String(undefined)
book.dataset.author = null
let a = null;