_.isPlainObject(value)


153

_.isPlainObject(value)

_.isPlainObject判斷一個值是否是一個js原生對象,即使用Object構造函數創建的對象 或者 擁有[[Prototype]]屬性為null的對象

參數

value (*): 需要檢查的值

返回值

(boolean): 如果是原生對象返回true,否則false

例子

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

源代碼

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM