在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必须是:

  • 数字
  • 排列
  • 目的
  • 未定义