在JavaScript中,我们如何识别对象是哈希还是数组?
我的JSON调用的输出可以是数组或散列。 我如何区分这两个?
现代浏览器支持Array.isArray(obj)
方法。
有关文档和填充, 请参阅MDN 。
= 从2008年的原始答案 =
你可以使用你的输出的构造器属性:
if(output.constructor == Array){ } else if(output.constructor == Object){ }
是对象:
function isObject ( obj ) { return obj && (typeof obj === "object"); }
是数组:
function isArray ( obj ) { return isObject(obj) && (obj instanceof Array); }
因为数组是对象,所以您需要首先testing一个variables是否是一个数组,然后如果它是一个对象:
if (isArray(myObject)) { // do stuff for arrays } else if (isObject(myObject)) { // do stuff for objects }
你的意思是“对象”而不是“哈希”?
>>> var a = []; >>> var o = {}; >>> a instanceof Array true >>> o instanceof Array false
我做了一个确定它是否是字典的函数。
exports.is_dictionary = function (obj) { if(!obj) return false; if(Array.isArray(obj)) return false; if(obj.constructor != Object) return false; return true; }; // return true test.equal(nsa_utils.is_dictionary({}), true); test.equal(nsa_utils.is_dictionary({abc:123, def:456}), true); // returns false test.equal(nsa_utils.is_dictionary([]), false); test.equal(nsa_utils.is_dictionary([123, 456]), false); test.equal(nsa_utils.is_dictionary(null), false); test.equal(nsa_utils.is_dictionary(NaN), false); test.equal(nsa_utils.is_dictionary('hello'), false); test.equal(nsa_utils.is_dictionary(0), false); test.equal(nsa_utils.is_dictionary(123), false);
检查对象的“构造函数”属性。 它是数组 – 它是一个数组对象。
var a = { 'B':{长度:0}, 'C':[1,2] } 如果(acconstructor ==数组) for(var i = 0; i <aclength; i ++) 警报(AC [1]); 其他 for(var in in); 警报(AB [S]);
对于parsingjson可以派上用场:)
isArrayHashs = (attr) -> !!attr && attr.constructor == Array && isHash(attr[0]) isHash = (attr) -> !!attr && !$.isNumeric(attr) && attr.constructor == Object
attr [0] .constructor必须是:
- 串
- 数字
- 排列
- 目的
- 未定义