jquery如何判断是否为对象?

在jquery中,可以使用isPlainObject()方法来判断是否为对象。

示例:

var obj = {a:1}

var bool = $.isPlainObject(obj) 判断是否为对象  返回Boolean

console.log(bool) //true

isPlainObject() 方法

isPlainObject() 方法用于判断指定参数是否是一个纯粹的对象,返回值为Boolean类型。

"纯粹的对象",就是通过 { }、new Object()、Object.create(null) 创建的对象。

这个方法的作用是为了跟其他的 JavaScript对象如 null,数组,宿主对象(documents),DOM 等作区分,因为这些用 typeof 都会返回object。

语法:

$.isPlainObject( object )

参数说明:

  • object:任意类型 需要进行判断的任意值。

$.isPlainObject({});  //true
$.isPlainObject(new Object);  //true
$.isPlainObject(Object.create(null));  //true
$.isPlainObject([]);  //false
$.isPlainObject(document);  //false

源码分析

我们来看看jQuery 3.3.1 版本下的源码:https://github.com/jquery/jquery/blob/ac9e3016645078e1e42120822cfb2076151c8cbe/src/core.js#L236

var class2type = {};
 
//Object.getPrototypeOf() 方法返回指定对象的原型(内部[[Prototype]]属性的值)。
var getProto = Object.getPrototypeOf;
 
//相当于 Object.prototype.toString
var toString = class2type.toString;
 
//hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性
//相当于 Object.prototype.hasOwnProperty
var hasOwn = class2type.hasOwnProperty;
 
//因为 hasOwn 是一个函数,所以这里调用的是内置对象 Function 的toString() 方法
//相当于 Function.prototype.toString
var fnToString = hasOwn.toString;
 
//相当于 Function.prototype.toString.call(Object)
//就是Object 构造函数 转字符串的结果
// ObjectFunctionString 其实就是 "function Object() { [native code] }" 这样的一个字符串
var ObjectFunctionString = fnToString.call(Object);
 
function isPlainObject (obj) {
 var proto, Ctor;

从源码来看,isPlainObject()方法 的实现,主要分三部分

1、去掉类型不是Object 的,

用的是 Object.prototype.toString.call() 方法,这个方法所有类型都会得到不同的字符串,而不是用 typeof,因为 typeof 只能区分基本类型,比如数组,typeof 返回的还是 “object” 字符串

var arr = [];
var obj = {};
 
typeof arr;    //"object"
typeof obj;    //"object"
typeof document;    //"object"
 
Object.prototype.toString.call(arr);    //"[object Array]"
Object.prototype.toString.call(obj);    //"[object Object]"
Object.prototype.toString.call(document);    //"[object HTMLDocument]"

2、判断对象有没有原型,没有原型的对象算纯粹对象

3、判断是不是通过 "{}" 或 "new Object" 方式创建的对象

这就要判断他们的构造函数了,所以用 Function.prototype.toString 方法

Function 对象覆盖了从 Object 继承来的 Object.prototype.toString 方法。
函数的 toString 方法会返回一个表示函数源代码的字符串。具体来说,包括 function关键字,形参列表,大括号,以及函数体中的内容。

function fn(said){
  this.say = said;
}
 
Function.prototype.toString.call(fn); 
//"function fn(said){
//  this.say = said;
//}"
 
Function.prototype.toString.call(Object);
//"function Object() { [native code] }"
Image placeholder
前端答疑
未设置
  55人点赞

没有讨论,发表一下自己的看法吧

推荐文章
如何判断是否为jquery对象?

要判断一个javascript的对象是什么类型,可以使用typeof,但是typeof只能判断出js的基础对象(string,boolean,number,object)而,判断一个对象是否为jque

jquery如何判断是否是对象?

jquery如何判断是否是对象?jquery提供了isPlainObject方法来判断一个变量是否是对象类型,返回值为Boolean类型。例子:varobj={a:1}; vararr=[1,2];

jquery如何判断是否为数组?

jquery如何判断是否为数组?$.isArray()函数用于判断指定参数是否是一个数组。只需要将需要判断的变量传入方法中即可。语法$.isArray(object)/jQuery.isArray(o

jquery如何判断是否为数字?

在jquery里,我们可以用下面这些方法来判断变量是否是数字:1、$.isNumeric();jquery里内置的一个用来判断是否为数字的函数,用$.isNumeric()来判断是否为数字的话,一些特

jquery如何判断是否为json格式?

jquery如何判断是否为json格式?思路:使用jquery的parseJSON()方法,将字符串转为json对象,并用trycatch语句捕获错误,没有异常,则是json格式,否则不是。funct

jquery如何判断对象是否为空?

$.isEmptyObject$.isEmptyObject()函数用于检查对象是否为空(不包含任何属性)。调用格式如下:$.isEmptyObject(obj);其中,参数obj表示需要检测的对象名

jquery如何判断元素内容是否为空?

jquery如何判断元素内容是否为空?下面提供了两种方法用于检查指定id的元素的内容是否为空,当然了,不仅仅适用于指定了id的元素,同样适用于其他元素,只需要改变选择器即可。一、使用html()方法获

jquery如何判断的是否为数字?

方法一:使用isNaN()函数varval=$("#test").val(); varival=parseInt(val);//如果变量val是字符类型的数则转换为int类型如果不是则ival为NaN

判断是否是jquery对象?

判断是否是jquery对象?要判断一个javascript的对象是什么类型,可以使用typeof,但是typeof只能判断出js的基础对象(string,boolean,number,object)。

jquery如何判断是否是数组?

jquery如何判断是否是数组?jquery提供了isArray方法来判断一个变量是否是数组类型,返回值为Boolean类型。例子:varobj={a:1}; vararr=[1,2]; varbo

jquery如何判断是否是ie浏览器?

jquery如何判断是否是ie浏览器?在写页面的时候,会遇到浏览器兼容问题,在这个浏览器中可以使用,但在其他浏览器中却不能很好的显示。以下就是判断浏览器的方法,从而更好的区分代码,使得页面正常浏览。f

jquery如何判断对象是否获取焦点?

jquery如何判断对象是否获取焦点?jquery判断对象获取焦点可以使用$(selector).is(":focus")。当对象具有焦点时返回为true,否则返回为false。语法:$(select

jquery如何判断对象是否存在?

jquery如何判断对象是否存在?一、jQuery判断对象是否存在1、方法一在jQuery中,varobj=$("#id")无论id这个控件是否存在,都是返回object,所以需要通过length来判

jQuery判断是否为数字?

jQuery判断是否为数字?在jquery里,我们可以用下面这些方法来判断变量是否是数字:1、$.isNumeric();jquery里内置的一个用来判断是否为数字的函数,用$.isNumeric()

jquery如何判断元素是否存在?

jquery如何判断元素是否存在?jquery使用$(selector)方法查找dom元素,返回的是一个jquery对象,具有length属性。length即找到的dom元素个数,只需判断length

jquery如何判断图片是否加载完成?

对于图片的处理,例如幻灯片播放、缩放等,都是依赖于在所有图片完成之后再进行操作。今天来看下如何判断所有的图片加载完成,而在加载完成之前可以使用loading的gif图表示正在加载中。一、普通方法监听i

jquery如何判断属性是否存在?

jquery如何判断属性是否存在?jquery判断属性存在可以使用attr()方法、is()方法、filter()方法,以及原生js的hasAttribute()方法。1、使用attr()获取属性,检

jquery如何判断值是否是url地址?

jquery如何判断值是否是url地址?思路:1、创建一个输入框,使用jquery给它注册change事件;2、创建一个函数checkUrl,传入一个url参数;3、函数内编写一条检测url正确性的正

jquery如何判断元素是否在数组中?

要判断数组中是否包含某个元素,从原理来来说,就是遍历整个数组,然后判断是否相等。可以使用Jquery提供的方法:$.inArray("元素(字符串)",数组名称)进行判断,当存在该元素(字符串)时,返

jquery如何判断字符串是否包含指定字符?

方法一:使用indexOf()和lastIndexOf()方法案例:varCts="bblText"; if(Cts.indexOf("Text")>=0){ alert('Cts中包含Text字符串

jquery如何判断复选框是否被选中?

方法一:get(0).checkedif($("#checkbox-id").get(0).checked){ //dosomething }方法二:is(':checked')if($('#chec

jquery如何判断某个属性是否存在?

在JQuery中,我们会判断元素是否存在某个属性。比如是否包含class="new"的样式呢?在JQuery中判断是非常简单的。因为有hasClass这个方法,使用$("input[name=new]

jquery如何判断某个dom节点是否存在?

想要判断某个dom节点是否存在,可以使用length属性来判断。jquery使用length属性判断length属性包含jQuery对象中元素的数目。示例: 这里是i

jquery如何判断字符串是否相等?

在jquery中字符串比较没有equals()方法,要比较两个字符串是否相等可以直接用==来进行判断。有时需要注意空格!可以先使用$.trim(str)去掉字符串起始和结尾的空格,然后使用用==来进行

jquery怎么判断对象是否为空?

jquery怎么判断对象是否为空?jquery的isEmptyObject方法可以判断对象是否为空此方法是jquery将forin进行的封装(相关课程推荐:jQuery教程)vardata={}; v