确定Javascript对象是“复杂”对象还是仅仅是字符串

前端之家收集整理的这篇文章主要介绍了确定Javascript对象是“复杂”对象还是仅仅是字符串前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我希望能够传递一个字符串文字,
'this is a string'

或者一个javascript对象,

{one: 'this',two: 'is',three: 'a',four: 'string' }

作为函数的参数,并根据它是字符串还是对象采取不同的操作.我如何确定哪个是真的?

具体来说,我想迭代对象的属性,如果属性是字符串,则进行一些解析,但如果属性是对象,则递归嵌套.我已经想出如何使用$.each()迭代对象的属性,但是如果我只是用字符串做这个,它会将字符串作为一个字母数组而不是一个单独的东西来处理.我可以通过其他方式解决这个问题吗?

解决方法

var data = {
    foo: "I'm a string literal",bar:  {
       content: "I'm within an object"
    }        
};

jQuery的

$.each(data,function(i,element){
    if($.isPlainObject(element){
       // we got an object here
    }
});

在jQuery lib中有类似的方法,如$.isArray()或$.isFunction().

原生Javascript

for(var element in data){
   if(toString.call(element) === '[object Object]'){
      // we got an object here
   }
}

在toString中使用hack’ish方式有一个优点,即可以识别它是否真的是一个对象和一个数组.对象和数组都将使用typeof元素返回对象.

长话短说,你不能依靠typeof运算符来区分真实对象和数组.为此你需要toString.call().如果你只是需要知道它是否是任何对象,typeof就好了.

猜你在找的JavaScript相关文章