lodash源码分析之isElement
本文为读 lodash 源码的第二百一十一篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash
gitbook也会同步仓库的更新,gitbook地址:pocket-lodash
依赖
import isObjectLike from './isObjectLike.js'
import isPlainObject from './isPlainObject.js'
《lodash源码分析之isObjectLike》 《lodash源码分析之isPlainObject》
源码分析
isElement
用来判断 value
是否为一个 Dom element
对象。
function isElement(value) {
return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value)
}
首先判断 value
是否为类对象;再判断属性 nodeType
是否为 1
,Dom Element
对象必定会有一个 nodeType
为 1
的属性;接着再排除纯对象,因为 Dom Element
必定会继承某类元素对象。例如 div
会继承 HTMLDivElement
。
可以看出,这段代码是不严谨的,例如:
function FakeElement () {
this.nodeType = 1
}
const fakeElement = new FakeElement()
isElement(fakeElement) // => true
这个 issue 解释了这样做的原因。
License
署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0)
最后,所有文章都会同步发送到微信公众号上,欢迎关注,欢迎提意见:
作者:对角另一面