我希望能够传递一个字符串文字,
'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就好了.