深入学习jquery源码之isFunction()和isPlainObject()

2023-11-13

深入学习jquery源码之isFunction()和isPlainObject()

isArray(obj)

概述

测试对象是否为数组。

参数

obj Object

用于测试是否为数组的对象

$("b").append( " + $.isArray([]) );
<b>true</b>

isFunction(obj)

概述

测试对象是否为函数。

注意:jQuery 1.3以后,在IE浏览器里,浏览器提供的函数比如'alert'还有 DOM 元素的方法比如 'getAttribute' 将不认为是函数

参数

obj Object

用于测试是否为函数的对象

检测是否为函数

function stub() {
    }
var objs = [
            function () {},
            { x:15, y:20 },
            null,
            stub,
            "function"
          ];
        jQuery.each(objs, function (i) {
        var isFunc = jQuery.isFunction(objs[i]);
        $("span:eq( " + i + ")").text(isFunc);
      });
[ true,false,false,true,false ]

isEmptyObject(obj)

概述

jQuery 1.4 新增。测试对象是否是空对象(不包含任何属性)。

jQuery 1.4 中,这个方法既检测对象本身的属性,也检测从原型继承的属性(因此没有使用hasOwnProperty)。

参数

obj Object

用于测试是否为空对象

jQuery.isEmptyObject({}) // true
jQuery.isEmptyObject({ foo: "bar" }) // false

 

isPlainObject(obj)

概述

测试对象是否是纯粹的对象(通过 "{}" 或者 "new Object" 创建的)。

obj Object

用于测试是否为纯粹的对象

测试是否为纯粹的对象

jQuery.isPlainObject({}) // true
jQuery.isPlainObject("test") // false

 

isWindow(obj)

概述

测试对象是否是窗口(有可能是Frame)。

参数

obj Object

用于测试是否为窗口的对象

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.5.2.js"></script>
</head>
<body>
  Is 'window' a window? <b></b>
<script>$("b").append( "" + $.isWindow(window) );</script>

</body>
</html> 

 

isNumeric(value)

概述

确定它的参数是否是一个数字。

$.isNumeric() 方法检查它的参数是否代表一个数值。如果是这样,它返回 true。否则,它返回false。该参数可以是任何类型的

参数

value

用于测试的值。

$.isNumeric("-10");  // true
$.isNumeric(16);     // true
$.isNumeric(0xFF);   // true
$.isNumeric("0xFF"); // true
$.isNumeric("8e5");  // true (exponential notation string)
$.isNumeric(3.1415); // true
$.isNumeric(+10);    // true
$.isNumeric(0144);   // true (octal integer literal)
$.isNumeric("");     // false
$.isNumeric({});     // false (empty object)
$.isNumeric(NaN);    // false
$.isNumeric(null);   // false
$.isNumeric(true);   // false
$.isNumeric(Infinity); // false
$.isNumeric(undefined); // false

 

type(obj)

概述

检测obj的数据类型。

参数

obj Object

用于测试类型的对象

jQuery.type(true) === "boolean"
      jQuery.type(3) === "number"
        jQuery.type("test") === "string"
      jQuery.type(function(){}) === "function"
        jQuery.type([]) === "array"
      jQuery.type(new Date()) === "date"
        jQuery.type(/test/) === "regexp"

 

jquery源码

   
    var class2type = {};

    var toString = class2type.toString;

    var hasOwn = class2type.hasOwnProperty;

    var support = {};


   jQuery.extend({
        // Unique for each copy of jQuery on the page
        expando: "jQuery" + (version + Math.random()).replace(/\D/g, ""),

        // Assume jQuery is ready without the ready module
        isReady: true,

        error: function (msg) {
            throw new Error(msg);
        },

        noop: function () { },

        // See test/unit/core.js for details concerning isFunction.
        // Since version 1.3, DOM methods and functions like alert
        // aren't supported. They return false on IE (#2968).
        isFunction: function (obj) {
            return jQuery.type(obj) === "function";
        },

        isArray: Array.isArray || function (obj) {
            return jQuery.type(obj) === "array";
        },

        isWindow: function (obj) {
            /* jshint eqeqeq: false */
            return obj != null && obj == obj.window;
        },

        isNumeric: function (obj) {
            // parseFloat NaNs numeric-cast false positives (null|true|false|"")
            // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
            // subtraction forces infinities to NaN
            // adding 1 corrects loss of precision from parseFloat (#15100)
            return !jQuery.isArray(obj) && (obj - parseFloat(obj) + 1) >= 0;
        },

        isEmptyObject: function (obj) {
            var name;
            for (name in obj) {
                return false;
            }
            return true;
        },

        isPlainObject: function (obj) {
            var key;

            // Must be an Object.
            // Because of IE, we also have to check the presence of the constructor property.
            // Make sure that DOM nodes and window objects don't pass through, as well
            if (!obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow(obj)) {
                return false;
            }

            try {
                // Not own constructor property must be Object
                if (obj.constructor &&
                    !hasOwn.call(obj, "constructor") &&
                    !hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) {
                    return false;
                }
            } catch (e) {
                // IE8,9 Will throw exceptions on certain host objects #9897
                return false;
            }

            // Support: IE<9
            // Handle iteration over inherited properties before own properties.
            if (support.ownLast) {
                for (key in obj) {
                    return hasOwn.call(obj, key);
                }
            }

            // Own properties are enumerated firstly, so to speed up,
            // if last one is own, then all properties are own.
            for (key in obj) { }

            return key === undefined || hasOwn.call(obj, key);
        },

        type: function (obj) {
            if (obj == null) {
                return obj + "";
            }
            return typeof obj === "object" || typeof obj === "function" ?
                class2type[toString.call(obj)] || "object" :
                typeof obj;
        }

  

        // jQuery.support is not used in Core but other projects attach their
        // properties to it so it needs to exist.
        support: support
    });
	
	
	    // Populate the class2type map
    jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function (i, name) {
        class2type["[object " + name + "]"] = name.toLowerCase();
    });

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深入学习jquery源码之isFunction()和isPlainObject() 的相关文章

  • 深入学习jquery源码之trigger()与triggerHandler()

    深入学习jquery源码之trigger 与triggerHandler trigger type data 概述 在每一个匹配的元素上触发某类事件 这个函数也会导致浏览器同名的默认行为的执行 比如 如果用trigger 触发一个 subm
  • 深入学习jquery源码之before()和after()

    深入学习jquery源码之before 和after after content fn 概述 在每个匹配的元素之后插入内容 参数 content String Element jQuery 插入到每个目标后的内容 function Func
  • 深入学习jquery源码之map()

    概述 将一组元素转换成其他数组 不论是否是元素数组 你可以用这个函数来建立一个列表 不论是值 属性还是CSS样式 或者其他特别形式 这都可以用 map 来方便的建立 参数 callback 给每个元素执行的函数 把form中的每个input
  • 深入学习jquery源码之Deferred对象与holdReady()

    深入学习jquery源码之Deferred对象与holdReady jQuery的Deferred对象也有resolve reject then方法 还有done fail always 方法 jQuery就是用这个Deferred对象来注
  • 深入学习jquery源码之jQuery的构造函数与实例化

    深入学习jquery源码之jQuery的构造函数与实例化 创建jQuery对象的整个流程如下 1 调用 方法 2 调用jQuery prototype init 构造函数 3 根据选择器不同返回不同的jQuery对象 4 不同jQuery对
  • 深入学习jquery源码之jQuery的选择器引擎Sizzle(一)

    深入学习jquery源码之jQuery的选择器引擎Sizzle Sizzle是一个纯javascript CSS选择器引擎 jquery1 3开始使用sizzle Sizzle一反传统采取了相反的Right To Left的查询匹配方式 效
  • 深入学习jquery源码之弹出框插件实现

    深入学习jquery源码之弹出框设计 jquery自带的提示框 messager confirm 提示 您确定通过吗 function r if r 弹出框插件 function window undefined var COOKIE US
  • 深入学习jquery源码之is()与not()

    深入学习jquery源码之is 与not is expr obj ele fn 概述 根据选择器 DOM元素或 jQuery 对象来检测匹配元素集合 如果其中至少有一个元素符合这个给定的表达式就返回true 如果没有元素符合 或者表达式无效
  • 深入学习jquery源码之attr()与removeAttr()

    深入学习jquery源码之attr 与removeAttr attr name properties key value fn 概述 设置或返回被选元素的属性值 参数 name String 属性名称 properties Map 作为属性
  • 深入学习jquery源码之noConflict()

    深入学习jquery源码之noConflict jQuery noConflict extreme 概述 运行这个函数将变量 的控制权让渡给第一个实现它的那个库 执行 var jq noConflict 后 将不再控制当前的jQuery 而
  • 深入学习jquery源码之empty()与返回值remove()

    深入学习jquery源码之empty 与返回值remove empty 概述 删除匹配的元素集合中所有的子节点 把所有段落的子元素 包括文本节点 删除 p Hello span Person span a href and person a
  • 深入学习jquery源码之查询选择插件的实现

    深入学习jquery源码之上传查询选择插件的实现 function var defaults url fieldCode multi false area 40 80 code code name 注意顺序 先是code 再是name fu
  • 深入学习jquery源码之wrap()和wrapAll()

    深入学习jquery源码之wrap 和wrapAll wrap html element fn 概述 把所有匹配的元素用其他元素的结构化标记包裹起来 这种包装对于在文档中插入额外的结构化标记最有用 而且它不会破坏原始文档的语义品质 这个函数
  • 深入学习jquery源码之获取url中参数插件

    深入学习jquery源码之获取url中参数插件 function window undefined 定义 通用工具方法 扩展对象基元 coreUtil function return Object apply this arguments
  • 深入学习jquery源码之each()

    each 遍历一个数组或对象 可以是DOM json等格式 等价于for循环 返回值 jQuery each callback 参数 对于每个匹配的元素所要执行的函数 概述 以每一个匹配的元素作为上下文来执行一个函数 意味着 每次执行传递进
  • 深入学习jquery源码之append()和prepend()

    深入学习jquery源码之append 和prepend append content fn 概述 向每个匹配的元素内部追加内容 这个操作与对指定的元素执行appendChild方法 将它们添加到文档中的情况类似 参数 content St
  • 深入学习jquery源码之isFunction()和isPlainObject()

    深入学习jquery源码之isFunction 和isPlainObject isArray obj 概述 测试对象是否为数组 参数 obj Object 用于测试是否为数组的对象 b append isArray b true b isF
  • 深入学习jquery源码之html()与text()和val()

    深入学习jquery源码之html 与text 和val html val fn 概述 取得第一个匹配元素的html内容 这个函数不能用于XML文档 但可以用于XHTML文档 在一个 HTML 文档中 我们可以使用 html 方法来获取任意
  • 深入学习jquery源码之data()

    深入学习jquery源码之data jQuery data element key value 概述 在元素上存放数据 返回jQuery对象 注意 这是一个底层方法 你应当使用 data 来代替 此方法在jQuery 1 8中删除 但你仍然
  • 深入学习jquery源码之addClass()和toggleClass()与hasClass()

    深入学习jquery源码之addClass 和toggleClass 与hasClass addClass class fn 概述 为每个匹配的元素添加指定的类名 参数 class String 一个或多个要添加到元素中的CSS类名 请用空

随机推荐

  • 黄金矿工(Java)

    先来一张效果图 图片资源 https pan baidu com s 1weCGFLQlzOTvDRY18bizrg pwd ivjt 提取码 ivjt 该项目一共12个类 均处于同一目录 首先是基类 其余用来表示物体的类都继承它 impo
  • Tensorflow 1.13训练模型.pb文件转换成Tensorflowlite可以使用的.tflite文件过程记录

    Tensorflow 1 13训练模型 pb文件转换成Tensorflowlite可以使用的 tflite文件过程记录 前言 之前一直通过1 13版本的TensorflowGpu训练模型 使用范围局限在电脑端 例如opencv调用模型等等
  • unity游戏开发-socket网络通信

    本篇主要是分享基于unity的客户端socket网络通信方案 关于服务器的c socekt搭建放在了这里 基于C 的Tcp服务端通信 其中关于socekt粘包断包的处理放在这里分享了 C socket粘包断包处理 目录 整体设计 TcpCl
  • Spring Security Oauth2 认证(获取token/刷新token)流程(password模式)

    1 本文介绍的认证流程范围 本文主要对从用户发起获取token的请求 oauth token 到请求结束返回token中间经过的几个关键点进行说明 2 认证会用到的相关请求 注 所有请求均为post请求 获取access token请求 o
  • BUUCTF WEB刷题记录

    第一题 刚打开的页面 看源码 发现source php 访问source php 我们要用file参数带出flag 但是有白名单限制 第一个和第二个判断是对file本身的值进行判断 第三个和第四个是对 前面的file值进行判断 所以我们可以
  • jeecg-boot字典翻译改造(支持实体类详情查询自动翻译)

    找到字典切面类 DictAspect 改造方法 parseDictText 支持自动生成的列表接口 单个实体类查询翻译 代码如下 private void parseDictText Object result if result inst
  • 2023 最新版IntelliJ IDEA 2023.1创建Java Web前(vue3)后端(spring-boot3)分离 项目详细步骤(图文详解)

    文章目录 接上篇 项目构建所需的相关工具 Java IDEA maven NodeJS Vue Visual Studio Code 后端项目创建详细步骤 1 开始创建新项目 2 输入项目名称 选择项目存储位置 项目管理工具 Maven 选
  • Hibernate lazy load.

    HIBERNATE的持久化对象加载策略 延迟加载 也就是用到的时候才去加载 这样可以提高一些性能 Hibernate的lazy loading 采用了一个HibernateSession来管理session 它的逻辑是每进行一次数据库操作
  • unpkg 与 npm 的基本介绍

    目录 定义 特点 原理 使用 npm安装流程 npm install npm update registry 区别 总结 定义 UNPKG是一个基于npm registry 的静态资源 CDN 服务 它可以快速获取和使用任何JavaScri
  • springmvc中操作json,配置FastJson

    目前网络上传递数据大部分都是json和xml 但是xml使用的很少了 这里主要介绍json 一般来说json常用的场景是提供外部接口 请求内使用request域就足够了 springmvc对于json的支持 上图 1 请求json方式分析
  • 搭建AI智能语音外呼系统

    随着人工智能技术的发展 近半年来涌现了大量基于人工智能的呼叫中心业务服务商和集成商 仅电销机器人这一个方向就至少有近百家公司正在推广运营 包括百度 讯飞 智齿 硅基 百应 箭鱼 容联等 商务上的需求非常强烈 整个市场都飞快地热闹起来 一套可
  • Redis优化秒杀系统

    Redis优化秒杀系统 使用背景 普通的基于mss框架的系统在并发量不是很高的情况下 对redis的需求不是很高 redis在系统中的角色相当于一个对象缓存器 在高并发的系统中 比如秒杀系统 在某一刻对数据库中的一条数据可能是成千上万的用户
  • 前端页面生成PDF方案之puppetter

    1 新建一个文件夹 例如 test 2 新建一个js文件 例如test js 3 进入test文件夹 在该目录下运行命令行 并执行下面命令 npm init 4 运行命令安装 npm i puppetter 5 编辑test js cons
  • 常量池、运行时常量池、字符串值基本概念区分

    常量池 Constant Pool 常量池数据编译期被确定 是Class文件中的一部分 存储了类 方法 接口等中的常量 当然也包括字符串常量 字符串池 字符串常量池 String Pool String Constant Pool 是常量池
  • 微信公众平台开发笔记4(关注回复自定义消息)

    基于WXJava开发 最终目的 实现关注回复自定义消息 一条文本 一条图片 点击菜单发送视频或音频 音乐可以发送但是不能正常播放 猜测是填写的地址有问题 音频上传时需要先在接口测试平台多媒体文件上传接口上传缩略图 jpeg 新建WxMess
  • 从0实现基于Linux socket聊天室-实现聊天室的登录、注册功能-3

    上一篇我们已经讲了如何搭建一个多线程的服务器模型 可以支持多个客户端同时连接服务器 本篇我们来实现多个客户端 如何实现向服务器注册信息 并实现登录的功能 想了解更多Linux 编程知识 请关注 公众号 一口Linux 数据结构 接着上一篇的
  • Redis学习:哨兵模式

    主从切换技术的方法是 当主服务器宕机后 需要手动把一台从服务器切换为主服务器 这就需要人工干预 费事费力 还会造成一段时间内服务不可用 这不是一种推荐的方式 更多时候 我们优先考虑哨兵模式 一个典型哨兵模式 哨兵配置文件 sentinel
  • freeCAD part工作台,两个物体做合集相加的布尔组合先后顺序区别

    两个紧挨 空间尺寸上无缝隙 的物体 在part 工作台下做union的布尔操作 先选中和后选中的物体顺序还是有区别的 之前一直没注意 一直遇到问题才发现 例如有如图的2个物体 这里面的cut和fusion003已经做好了 现在我想把他组合到
  • c语言中英文转换器在线转换器,汉英转换器

    路由器之家网今天精心准备的是 汉英转换器 下面是详解 汉译英 英语是国际语言 因此我们非常重视英语的 English is an international language Thus we attach great importance
  • 深入学习jquery源码之isFunction()和isPlainObject()

    深入学习jquery源码之isFunction 和isPlainObject isArray obj 概述 测试对象是否为数组 参数 obj Object 用于测试是否为数组的对象 b append isArray b true b isF