问题描述
我遇到了Flow的一个用例,当我使用document.documentElement
时,我需要先对其进行类型优化,因为它有可能如其内置定义中所定义的那样为null。
https://github.com/facebook/flow/blob/8391250177e37a047a33ae728fdbd1138632294a/lib/dom.js#L824
const { documentElement } = document;
if (documentElement instanceof HTMLElement) {
// continue doing stuff
}
做一个简单的谷歌不会产生任何结果,为什么是这种情况。所以我的问题是,什么时候该值可以为null或lib defs是一个错误?
解决方法
我认为它直接来自规范的类型定义。在“空文档”的情况下,var coordObj = [];
var divs = document.getElementsByTagName('div');
for (i = 0; i < divs.length; i++) {
var hasHorizontalScrollbar = divs[i].scrollWidth > divs[i].clientWidth;
var hasVerticalScrollbar = divs[i].scrollHeight > divs[i].clientHeight;
if(hasVerticalScrollbar || hasHorizontalScrollbar) {
var getCoords=divs[i].getBoundingClientRect();
coordObj.push(getCoords);
}
}
return coordObj;
可能是任何元素或没有元素。您可以构造Document#documentElement
,因此在某些情况下它可能不是Document
。似乎有些人为的,但我认为应该考虑所有情况的类型。因此,如果您有一个空文档,则可能会失败。
对于任何非空的HTML文档,
HTMLElement
始终是documentElement
元素。对于任何非空的XML文档,<html>
将 始终是文档的根元素。
documentElement