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