Literally:
(using Firefox v3.6, with for-in
caveats as previously noted
(HOWEVER the use below might endorse for-in
for this very purpose! That is, enumerating array elements that ACTUALLY exist via a property index (HOWEVER, in particular, the array length
property is NOT enumerated in the for-in
property list!).).)
(Drag & drop the following complete URI's for immediate mode browser testing.)
JavaScript:
function ObjInRA(ra){var has=false; for(i in ra){has=true; break;} return has;}
function check(ra){
return ['There is ',ObjInRA(ra)?'an':'NO',' object in [',ra,'].'].join('')
}
alert([
check([{}]), check([]), check([,2,3]),
check(['']), '\t (a null string)', check([,,,])
].join('\n'));
which displays:
There is an object in [[object Object]].
There is NO object in [].
There is an object in [,2,3].
There is an object in [].
(a null string)
There is NO object in [,,].
Wrinkles: if looking for a "specific" object consider:
JavaScript: alert({}!={}); alert({}!=={});
And thus:
JavaScript:
obj = {prop:"value"};
ra1 = [obj];
ra2 = [{prop:"value"}];
alert(ra1[0] == obj);
alert(ra2[0] == obj);
Often ra2
is considered to "contain" obj
as the literal entity {prop:"value"}
.
A very coarse, rudimentary, naive (as in code needs qualification enhancing) solution:
JavaScript:
obj={prop:"value"}; ra2=[{prop:"value"}];
alert(
ra2 . toSource() . indexOf( obj.toSource().match(/^.(.*).$/)[1] ) != -1 ?
'found' :
'missing' );