Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.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 了解数据属性值设置为null的原因_Javascript_Jquery - Fatal编程技术网

Javascript 了解数据属性值设置为null的原因

Javascript 了解数据属性值设置为null的原因,javascript,jquery,Javascript,Jquery,我刚刚浏览了中的代码,遇到了以下代码行: delete $this.data('counterup-nums'); $this.data('counterup-nums', null); $this.data('counterup-func', null); delete $this.data('counterup-nums'); 当然,这个插件使用数据属性来存储值,然后用于计算。现在我的问题不是上面几行代码在做什么,而

我刚刚浏览了中的代码,遇到了以下代码行:

            delete $this.data('counterup-nums');
            $this.data('counterup-nums', null);
            $this.data('counterup-func', null);
delete $this.data('counterup-nums');
当然,这个插件使用数据属性来存储值,然后用于计算。现在我的问题不是上面几行代码在做什么,而是为什么上面几行代码

确定第一行代码:

            delete $this.data('counterup-nums');
            $this.data('counterup-nums', null);
            $this.data('counterup-func', null);
delete $this.data('counterup-nums');
确实有点道理,但是下面的代码行到底在做什么呢

$this.data('counterup-nums', null);
$this.data('counterup-func', null);
?

:删除操作符从对象中删除属性

我可能无法解释是什么删除了$this.data'counterup-nums';这行代码正在执行,但可能是作者想用这行代码清除所有内容。我相信这个delete关键字在$this.data'counterup-nums中没有意义。我宁愿使用Jquery.removeData从元素中删除数据属性,而不是删除

但遵循like是有意义的:

$this.data('counterup-nums', null);
$this.data('counterup-func', null);

作者正在将数据属性设置为null,以便下次他可以轻松识别,值是否重置。

这很有趣。但是我通过编写下面的示例代码研究了一些有趣的事实

 function hello(){
    var el = document.querySelector('#user');
    el.dataset.dateOfBirth = '1960-10-03';   
}


function undIt(){
 var el = document.querySelector('#user');
 el.dataset.dateOfBirth = undefined;    
}

hello()
alert(document.querySelector('#user').dataset.dateOfBirth)

undIt()
alert(document.querySelector('#user').dataset.dateOfBirth)

delete document.querySelector('#user').dataset.dateOfBirth;
Js Fiddler链接

当我对delete语句进行注释时,我发现dataset变量仍然作为未定义的字符串存在于domtreeset中,请参见下图

当我取消对delete语句的注释时,我可以看到它已从DOM树中删除。见下图

结论:作者使用delete关键字完全删除了数据变量的引用及其持久性

--------------*****基于用户guest271314的评论******---------

我又做了一些研究,是的,jQuery实现是不同的。因此,要实现上述jQuery代码,请参见下面的代码

jQuery维护一个名为jQuery.cache.data的缓存变量,并将键/值存储在此框架下,以通过查询DOM和提取值来避免性能开销。如果您想在jQuery中使用数据API的HTML5实现,请使用.Attr API


注意:在上面的代码中,最后一行抛出一个错误,因为值被删除,浏览器不能在对象树中引用未定义或空的对象引用。从技术上讲,变量和引用被删除。

我不认为删除$this.data'counterup-nums';做任何事@Nirus注意,jQuery.data看起来不依赖于HTMLElement.dataset;两个独立的实现?@guest271314根据您的评论做了更多的研究,更新了答案。希望能有帮助。