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根据您的评论做了更多的研究,更新了答案。希望能有帮助。