_.isElement(value)

134

_.isElement(value)

_.isElement检测一个值是否类似于一个DOM元素

参数

value (*): 需要检查的值

返回值

(boolean): 如果是DOM对象返回true,否则false

例子

_.isElement(document.body);
// => true
 
_.isElement('<body>');
// => false

源代码

import isObjectLike from './isObjectLike.js'
import isPlainObject from './isPlainObject.js'

/**
 * Checks if `value` is likely a DOM element.
 *
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
 * @example
 *
 * isElement(document.body)
 * // => true
 *
 * isElement('<body>')
 * // => false
 */
//检测一个值是否类似于一个DOM元素
function isElement(value) {
  return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value)
  //判断value是一个object-like对象 并且它的nodeType属性等于1 并且value不是js原生对象
}

export default isElement
isPlainObject
import baseGetTag from './.internal/baseGetTag.js'
import isObjectLike from './isObjectLike.js'

/**
 * Checks if `value` is a plain object, that is, an object created by the
 * `Object` constructor or one with a `[[Prototype]]` of `null`.
 *
 * @since 0.8.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
 * @example
 *
 * function Foo() {
 *   this.a = 1
 * }
 *
 * isPlainObject(new Foo)
 * // => false
 *
 * isPlainObject([1, 2, 3])
 * // => false
 *
 * isPlainObject({ 'x': 0, 'y': 0 })
 * // => true
 *
 * isPlainObject(Object.create(null))
 * // => true
 */
//判断一个值是否是一个js原生对象,即使用Object构造函数创建的对象 或者 拥有[[Prototype]]属性为null的对象
function isPlainObject(value) {
  if (!isObjectLike(value) || baseGetTag(value) != '[object Object]') {
    //如果value不是object-like对象或者toStringTag不是[object Object]返回false
    return false
  }
  if (Object.getPrototypeOf(value) === null) {//如果value的原型为null返回true
    return true
  }
  let proto = value
  while (Object.getPrototypeOf(proto) !== null) {//循环一直获取value的原型的原型,一直获取到原型是null的那个对象
    proto = Object.getPrototypeOf(proto)
  }
  return Object.getPrototypeOf(value) === proto//判断value的原型对象是否和原型是null的原型对象是否是同一个对象
}

export default isPlainObject

 

posted @ 2018-12-20 18:04  hahazexia  阅读(1096)  评论(0)    收藏  举报