Javascript 正在检查没有值的HTML5数据属性

Javascript 正在检查没有值的HTML5数据属性,javascript,html,Javascript,Html,我有一个元素,它有一个HTML5data属性,没有值,但只有如下键: <div id="1" data-foo>Foo</div> getElementById("1").dataset.foo 然后,这将返回一个空值,我无法区分元素是否具有datafoo属性。是否有方法检查元素是否具有data foo属性,而不管它是否具有指定的值?您可以通过使用hasAttribute方法检查元素是否包含属性来完成此操作: document.getElementById('1').

我有一个元素,它有一个HTML5
data
属性,没有值,但只有如下键:

<div id="1" data-foo>Foo</div>
getElementById("1").dataset.foo

然后,这将返回一个空值,我无法区分元素是否具有
datafoo
属性。是否有方法检查元素是否具有
data foo
属性,而不管它是否具有指定的值?

您可以通过使用
hasAttribute
方法检查元素是否包含属性来完成此操作:

document.getElementById('1').hasAttribute('data-foo')

如果元素不具有
数据foo
属性,则调用
数据集.foo
将返回
未定义的
,而不是
null
(如果属性为空,则返回空字符串)

您应该检查实际值,如下所示:

var fooVal = document.getElementById('div1').dataset.foo;

// data-foo is not present at all:
if( fooVal === undefined )
{

} 

// data-foo is present but empty
if( fooVal === '' )
{

} 
当然,您可以将逻辑转换为简单的布尔值:

var hasFoo = ( document.getElementById('div1').dataset.foo !== undefined );

不正确。如果存在数据foo,则fooVal是空字符串,而不是null。@Alohci您是对的。所以第一种形式是错误的,但第二种形式是正确的,我猜。@BenM无论如何谢谢。你的回答很有帮助。有没有可能显式设置值是
未定义的
?@sawa-不是通过标记属性,没有。但是一些学究会争辩说,你不应该做
==未定义的
测试,因为在JavaScript中理论上可以定义
未定义的
!,因此,您的测试应该是
==void 0
,因为
void 0
的计算结果总是未定义的。我不是他们中的一员。