Javascript 即使属性值不变,也会触发变异观察者

Javascript 即使属性值不变,也会触发变异观察者,javascript,mutation-observers,Javascript,Mutation Observers,当我使用相同的值更改属性值时,查看inspector控制台,DOM树不会更改,但会触发变异观察者,因为我修改了属性值,但针对的是实际相同的值 有人能解释一下这是怎么回事吗?我插入了一个片段来说明我的观点 /*观察员*/ var divToUpdate=document.querySelector(“#update”); var config={attributeFilter:['data-update']}; var观察者=新的突变观察者(功能(突变){ 突变。forEach(功能(突变){

当我使用相同的值更改属性值时,查看inspector控制台,DOM树不会更改,但会触发变异观察者,因为我修改了属性值,但针对的是实际相同的值

有人能解释一下这是怎么回事吗?我插入了一个片段来说明我的观点

/*观察员*/
var divToUpdate=document.querySelector(“#update”);
var config={attributeFilter:['data-update']};
var观察者=新的突变观察者(功能(突变){
突变。forEach(功能(突变){
if(mutation.target.dataset.update=='true'){
log('Attribute value updated,但不是真的!',mutation);
}
});
});
observer.observe(divToUpdate,config);
/*按钮更新程序*/
document.querySelector('button')。addEventListener('click',function(){
setAttribute('data-update',true);
});
DIV带属性

更新DIV属性根据这段历史,MutationObserver就是这样设计的。对setAttribute的任何调用都会触发突变,无论该值是更改还是设置为当前值

divToUpdate.setAttribute('data-update',true)
divToUpdate.setAttribute('data-update',true')
都会在我的测试中触发突变观察者。或者我不理解你的评论。我复制了你的结果,但是如果我更改属性并将值设置为
a
truex
,它不会触发。关于
true
@mplungjan和@Barmar,有一些特别的东西你能分享一个JSFIDLE来展示吗?因为在我的测试中,无论是
true
“true”
还是
“abc”
都没有任何区别。@Rob_M的回答似乎证实了我的想法,但让我们看看是否有人提出了完整的解释。我的错误是,我也没有看到=='true'测试。无论值是否更改,单击都将触发。请尝试操作代码,但将“true”和“true”替换为“a”,则不会触发