当前位置:  开发笔记 > 编程语言 > 正文

在javascript中我们如何识别对象是Hash还是数组?

如何解决《在javascript中我们如何识别对象是Hash还是数组?》经验,为你挑选了4个好方法。

我的JSON调用的输出可以是数组或哈希.我该如何区分这两者?



1> pawel..:

现代浏览器支持该Array.isArray(obj)方法.

有关文档和polyfill,请参阅MDN.

= 2008年的原始答案 =

您可以使用输出的constuctor属性:

if(output.constructor == Array){
}
else if(output.constructor == Object){
}


+1用于提示Array.isArray.查看此链接以获取borwser支持:http://kangax.github.io/compat-table/es5/#Array.isArray
这可能会在不同页面之间发生冲突,因为它们都具有"Array"和"Object"构造函数的不同实例,这些实例不会相等.我不太确定如何制作一个演示这个的例子,但我在某处读到了它.

2> Borgar..:

对象:

function isObject ( obj ) {
   return obj && (typeof obj  === "object");
}

是数组:

function isArray ( obj ) { 
  return isObject(obj) && (obj instanceof Array);
}

因为数组是对象,所以如果变量首先是一个数组,那么你将要测试它,然后如果它是一个对象:

if (isArray(myObject)) {
   // do stuff for arrays
}
else if (isObject(myObject)) {
   // do stuff for objects
}



3> Jonny Buchan..:

你的意思是"对象"而不是"哈希"吗?

>>> var a = [];
>>> var o = {};
>>> a instanceof Array
true
>>> o instanceof Array
false



4> neoneye..:

我做了一个函数来确定它是否是字典.

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);

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有