10

我想创建可以与 Id 或通过传递 jQuery 对象一起使用的函数。

var $myVar = $('#myId');

myFunc($myVar);
myFunc('myId');

function myFunc(value)
{
    // check if value is jQuery or string
}

如何检测传递给函数的参数类型?

笔记! 这个问题不一样。我不想传递选择器字符串,例如#id.myClass. 我想像示例中一样传递 jQuery 对象。

4

7 回答 7

18

使用typeof运算符

if ( typeof value === 'string' ) {
  // it's a string
} else {
  // it's something else
}

或者确保它是 jQuery 对象的一个​​实例

if ( typeof value === 'string' ) {
  // it's a string
} else if ( value instanceof $) {
  // it's a jQuery object
} else {
  // something unwanted
}
于 2012-05-23T14:03:09.177 回答
3

每个 jquery 对象都有一个属性jquery。当然,如果您的对象具有jquery属性,这将失败......但如果您愿意,您可以进行更严格的检查......

function(o) {
    if(typeof o == 'object' && o.jquery) // it's jquery object.
}
于 2012-05-23T14:06:21.253 回答
1
function myFunc(value)
{
   if (typeof value == "string") {
      //it's a string
   }
   else if (value != null && typeof value == "object"} {
      //it's an object (presumably jQuery object)
   }
   else {
      //it's null or something else
   }


}
于 2012-05-23T14:04:08.273 回答
0

检查参数的类型还不够吗?

function myfunc(arg)
{
    if(typeof arg == 'string')
    {

    }
    else if(typeof arg == 'object')
    {

    }  
}

检查这个小提琴

于 2012-05-23T14:03:37.737 回答
0

尝试这个:

function myFunc(value)
{
   if(typeof value === 'object') {
   }
   else{
   }
}
于 2012-05-23T14:04:28.733 回答
0
function myFunc(value)
{
  if(typeof(value) == 'string')
    //this is a string
  else if (value === jQuery)
    //this is jQuery
  else if (typeof(value) == 'object')
    //this is an object
}

注意:在控制台中执行此操作:

> jQuery
function (a,b){return new e.fn.init(a,b,h)}
> var value = jQuery
undefined
> value
function (a,b){return new e.fn.init(a,b,h)}
> value === jQuery
true
于 2012-05-23T14:04:31.993 回答
0

尝试使用 typeof,例如:

var $myVar = $('#myId');

myFunc($myVar);
myFunc('myId');

function myFunc( value ){
    // check if value is jQuery or string
    switch( typeof value ) {
        case 'object':
        // is object
        break;

        case 'string':
        // is string
        break;

        // etc etc.
    }
}
于 2012-05-23T14:06:38.183 回答