//测试Chrome版本 40.0.2214.115 m //如有错误欢迎指出 //isPlainObject才是重点 //下面的一些方法前面都做了分析 //如有不懂可以看下我以前对这些方法的说明 var toString={}.toString; var class2type={}; var hasOwn={}.hasOwnProperty; var isArray=Array.isArray; var indexOf=[].indexOf; var each=function(obj,callback){ var value, length=obj.length, i=0, isArray=isArrayLike(obj); //两种情况 //类数组 if(isArray){ for(;i<length;i++){ //若是返回false,则直接跳出 value=callback.call(obj,i,obj[i]); if(value===false){ break; } } }else{ for(i in obj){ value=callback.call(obj,i,obj[i]); if(value===false){ break; } } } return obj; }; //第二个判断是否像数组一样的对象 var isArrayLike=function(obj){ var length=obj.length; //判断为空 if(obj==null){ return false; } if(type(obj)==="object" ||typeof(obj)==="function"){ return false; } return type(obj)==="array" ||length===0 || (length>0 &&(length-1) in obj); }; //第三个判断类型 var type=function(obj){ //排除为空的 if(obj==null){ return obj+""; } //做判断,如果是object或者function类型的时候 //不是执行后面 return typeof obj==="object" ||typeof obj==="function" ? class2type[toString.call(obj)] : typeof obj; }; each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(_,name){ class2type["[object "+name+"]"]=name.toLowerCase(); }); var isFunction=function(obj){ return type(obj); }; var isWindow=function(obj){ return obj!==null && obj.window===window; }; //本次重点来了 //字面量对象判断 //判断之前做一个测试,形如 {} var isPlainObject=function(obj){ //第一判断,如果不是object类型直接返回false //第二判断是否是节点类型 //第三window if(type(obj)!=="object" ||obj.nodeType||isWindow(obj)){ return false; } //当是{}或者是new Object() 时为真,这两种是符合的 只有object对象的原型中有这个方法 if(hasOwn.call(obj.constructor.prototype,"isPrototypeOf")){ return true; } }; console.info(isPlainObject(window)); console.info(isPlainObject({})); console.info(isPlainObject(new Object())); console.info(isPlainObject(new Date())); var d=new Object(); d.namexx='fsafa'; d.xx=function(){}; var c=function(){ this.namess="xxx"; this.fas=function(){}; }; //来看下 hasOwn.call(obj.constructor.prototype,"isPrototypeOf") 这句话到底是什么东东 //首先支hasOwnProperty做个说明 hasOwnProperty: //是用来判断一个对象是否有你给出名称的属性或对象。// //此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员。 console.info("c "+c.constructor); console.info("c "+c.constructor.prototype); console.info("d "+d.constructor); console.info("d "+d.constructor.prototype);//[object Object] //这个下面才有isPrototypeOf方法 console.info("{} "+{}.constructor); console.info("{} "+{}.constructor.prototype);//[object Object] console.log(d);//__proto__: Object -->isPrototypeOf: function isPrototypeOf() { [native code] } console.log(new c());//__proto__: c --->__proto__: Object constructor: function ()
相关推荐
本文实例为大家分享了jQuery实现轮播图及其原理的具体代码,供大家参考,具体内容如下 <!DOCTYPE html> <html> <head> <meta charset="utf-8" name="viewport" content="width=device-width,...
资源名称:jQuery技术内幕:深入解析jQuery架构设计与实现原理内容简介:本书首先通过“总体架构”梳理了各个模块的分类、功能和依赖关系,让大家对jQuery的工作原理有大致的印象;进而通过“构造 jQuery 对象”章节...
《jquery技术内幕:深入解析jquery架构设计与实现原理》由阿里巴巴资深前端开发工程师撰写,从源代码角度全面而系统地解读了jquery的17个模块的架构设计理念和内部实现原理,旨在帮助读者参透jquery中的实现技巧和...
jquery购物车 实现原理分析
jQuery获取当前点击的对象元素(实现代码) [removed][removed] </head> <body> 段落1 段落2 段落3 段落4 段落5 [removed] //获取当前点击的对象 $('p').click( function(){ //this表示当前被...
深入解析jquery架构设计与实现原理》首先通过“总体架构”梳理了各个模块的分类、功能和依赖关系,让大家对jquery的工作原理有大致的印象;进而通过“构造jquery对象”章节分析了构造函数jquery()的各种用法和内部...
jQuery实现简单复制json对象和json对象集合操作示例.docx
使用JQuery实现从JSON对象转换为form提交数据
利用JS和jQuery实现前端布局中的瀑布流布局,适合前端进阶者观看,有详细的视频讲解!
这里是我从Jquery中整理出来的一些对象和函数的用法,加上我自己的一些理解,和各位分享一下
JQuery高级编程之面向对象
jQuery中如何判断radio选中,这里共有4中方法来实现。
jQuery实现密码强度的智能判断特效,一般在注册时会用到这样的效果,告诉用户,用户输入的密码是否过于简单,php中文网推荐下载!
javascript jquery原理 javascript jquery原理 javascript jquery原理 javascript jquery原理 javascript jquery原理
在jQuery中,var obj = $(“#id”)无论id这个控件是否存在,都是返回object,这样可就无法使用if(obj)来判断这个控件是否存在了 二、jQuery判断对象是否存在 方式1: if ($('#target_obj_id').length > 0) { //...
Jquery 对象集合有兴趣的可下载看看
基于jQuery的对象切换插件,JQuery图片切换,图片切换
jquery 基本 层级 控制器 可见性 属性 子元素 表单对象属性 dom对象 等详细的一些操作~ 详细 简单~易懂 实用!
如果是下面的 jQuery 代码判断一个对象是否存在,是不能用的。 if($("#id")){ //... }else{ //... } 因为 $(“#id”) 不管对象是否存在都会返回 object 。 正确使用判断对象是否存在应该用: if($("#id")....