`
zccst
  • 浏览: 3322572 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

分析$.isPlainObject

阅读更多
作者:zccst

本次学习$.isPlainObject,是不是一个普通对象。测试对象是否是纯粹的对象(通过 "{}" 或者 "new Object" 创建的)

1,使用场景:

var o = {};

console.log($.isPlainObject(o));//如果是空对象就返回TRUE,否则返回FALSE。



2,下面看一下源码实现:
isPlainObject: function( obj ) {
        // Not plain objects:以下三种情况不是普通对象(1)使用typeof判断;(2)DOM节点(3)window
        // - Any object or value whose internal [[Class]] property is not "[object Object]"
        // - DOM nodes
        // - window
        if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
            return false;
        }

        // Support: Firefox <20
        // The try/catch suppresses exceptions thrown when attempting to access
        // the "constructor" property of certain host objects, ie. |window.location|
        // https://bugzilla.mozilla.org/show_bug.cgi?id=814622
        try {
       //obj的构造函数为真,且obj构造函数的原型对象里没有isPrototypeOf属性,则也不是纯粹的对象
            if ( obj.constructor && !core_hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
                return false;
            }
        } catch ( e ) {
            return false;
        }

        // If the function hasn't returned already, we're confident that
        // |obj| is a plain object, created by {} or constructed with new Object
        return true;
    }



判断过程:
var class2type = {};
var core_hasOwn = class2type.hasOwnProperty;
// Populate the class2type map
jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
    class2type[ "[object " + name + "]" ] = name.toLowerCase();
});

core_hasOwn.call( o.constructor.prototype, "isPrototypeOf" )与
o.constructor.prototype.hasOwnProperty( "isPrototypeOf" )是相同的

hasOwnProperty语法:obj.hasOwnProperty(prop) //返回值就是TRUE或FALSE


如果您觉得本文的内容对您的学习有所帮助,您可以微信:
分享到:
评论

相关推荐

    jQuery Utilities 分类下的函数(或属性)的实现方式分析

    除此之外,jQuery还提供了许多其他实用工具,如`$.trim()`用于去除字符串两端的空白,`$.isPlainObject()`判断是否为纯粹的对象,`$.inArray()`检查元素是否在数组中,以及`$.grep()`过滤数组等。这些函数的实现都...

    js中关于new Object时传参的一些细节分析

    而在某些情况下,比如使用$.isPlainObject()函数检查对象是否为“纯对象”时,new Object()创建的基本类型的包装对象和使用显式构造函数(如new Number())创建的对象都不会被认为是“纯对象”。 以下是使用$....

    jQuery权威指南-源代码

    6.3.2 $.ajaxSetup()设置全局Ajax /181 6.4 Ajax中的全局事件/184 6.4.1 Ajax全局事件的基本概念/184 6.4.2 ajaxStart与ajaxStop全局事件/184 6.5 综合案例分析—用Ajax实现新闻点评即时更新/187 6.5.1 需求...

    JQuery中extend的用法实例分析

    对于深拷贝,我们需要在调用 `$.extend` 时传入一个布尔值 `true` 作为第一个参数: ```javascript var deepCopyObj = $.extend(true, {}, obj1); ``` 这会创建 `obj1` 的深拷贝 `deepCopyObj`,即使 `obj1` 包含...

    超越Jquery_01_isPlainObject分析与重构

    ### 知识点:isPlainObject 方法分析 #### 1. jQuery 中的 isPlainObject 方法 - isPlainObject 是在 jQuery 1.4 版本中引入的一个方法,用于检测传入的对象是否是一个纯粹的对象。 - 所谓的“纯粹对象”主要是指...

    2014-10-13-深入理解jQuery(3)——extend1

    让我们通过源码分析来深入了解这个方法的工作原理。 首先,`jQuery.extend`方法接受多个参数,其中第一个参数可以是一个布尔值,用来决定是否执行深拷贝。如果第一个参数为`true`,则执行深拷贝;如果为`false`或未...

    jQuery源码分析系列_1.6

    1. **isPlainObject()**:判断给定的对象是否是一个纯对象(没有原型链上的方法)。 2. **extend()**:深度合并两个或多个对象。 3. **each()**:遍历对象或数组,类似于`for`循环。 4. **map()**:对数组中的每个...

    jQuery源码分析-03构造jQuery对象-源码结构和核心函数

    isPlainObject: function(obj) { // 判断是否为普通对象 }, // 其他静态方法... }); // 返回jQuery对象 return jQuery; })(); // 将全局变量jQuery和$赋值 window.jQuery = window.$ = jQuery; })...

    vue源码中的检测方法的实现

    在Vue.js中,对于数据的检测(响应式系统)是框架的核心之一,本文主要介绍Vue源码中关于数据变化检测的实现原理,并通过代码示例来分析其内部机制。 首先,Vue.js在初始化实例时,会对数据对象进行响应式化处理,...

    从vue源码看props的用法

    通过以上分析,我们可以看到 Vue 框架在处理 `props` 时的灵活性和细致程度。无论是在定义简单的数据传递,还是需要验证和约束的复杂数据,Vue 都提供了相应的支持。了解这些内部机制有助于我们更好地设计和优化组件...

    别了 JavaScript中的isXX系列

    我们将重点分析`isUndefined`函数,因为它是这些函数中经常被使用的例子之一,但它的存在可能并不是必要的。 首先,`isUndefined`函数用于检查一个变量是否未定义,它通常会使用严格相等操作符(`===`)进行判断。...

Global site tag (gtag.js) - Google Analytics