为何d3.select("svg") == d3.select("svg")的结果为false?
为啥d3.select("svg") == d3.select("svg")返回false?
哈哈,这个问题我当初刚玩D3的时候也踩过坑!其实核心原因和JavaScript里对象的比较逻辑直接相关:
- JavaScript里,对象之间的
==或===比较的是引用是否相同——也就是说,只有当两个变量指向内存里的同一个对象实例时,结果才是true。 - 每次调用
d3.select("svg"),D3都会创建一个全新的Selection对象,哪怕它们选中的是页面上同一个<svg>DOM元素,这两个Selection对象都是独立的实例,内存地址不一样,所以直接用==比较自然返回false。
举个直观的例子验证下:
const firstSel = d3.select("svg"); const secondSel = d3.select("svg"); // 比较两个Selection对象:false console.log(firstSel === secondSel); // 比较它们实际指向的DOM元素:true console.log(firstSel.node() === secondSel.node());
如果想判断两次选择是不是指向同一个DOM元素,记得用.node()方法取出包装的DOM节点再做比较哦!
内容的提问来源于stack exchange,提问作者namjo
相关产品推荐
相关产品推荐

