如何检查变量是对象还是数组?

6

我有一个问题,不知道如何解决它。我尝试了一些信息,想知道如何比较或检查一个变量是否为数组对象

我尝试过这样做:

console.log({} == []); // return false
console.log({1:"haha"} == {}); // return false
console.log(["haha"] == {}); // retun false

问题在于,我想知道一个变量是否实际上是一个对象,因为[]{}typeof都会返回object
console.log(isobject({1:"haha"})) // should return true;
console.log(isobject(["haha"])); // should return false;

或者

console.log(isobject({})) // should return true;
console.log(isobject([])); // should return false;

有没有类似以上的变量检查函数? 感谢任何更正。

数组 instanceof Array //输出 true ,也可以检查它是不是数组 - Jameel Moideen
@NinjaJami 怎么实现?array instanceof Array - Irvan Hilmi
1
你可以这样做:var arr=[1]; if(arr instanceof Array){} - Jameel Moideen
4个回答

9

这将有所帮助。

var a = [], b = {};

console.log(Object.prototype.toString.call(a).indexOf("Array")>-1);
console.log(Object.prototype.toString.call(b).indexOf("Object")>-1);

console.log(a.constructor.name == "Array");
console.log(b.constructor.name == "Object");

还有很多其他方法,但以上方法在所有浏览器中都具有向后兼容性。

相关问题请参考:

检查值是否为数组

检查值是否为对象


1
为什么要使用 indexOf 检查,而不是直接进行比较?您还可以检查构造函数的名称。 - CertainPerformance
我怎样可以检查构造函数的名称?@CertainPerformance - Irvan Hilmi
@IrvanHilmi 更新了答案。 - Vignesh Raja
@IrvanHilmi 例如 [].constructor.name === 'Array'(尽管对于数组来说,Array.isArray 更好),以及 ({}).constructor.name === 'Object' - CertainPerformance

5

arr = [1,2,3]

Array.isArray(arr) // 输出应该为 true

对于对象,我会这样做 obj = {a:1}

Object.keys(obj).length // 输出应该为 1

所以你可以这样做

Object.keys(obj).length >= 0 // 如果 obj 是对象字面量,则应该为 true。


1
Object.keys(obj).length // 应输出1对于 arr = [5]Object.keys(arr).length 也将输出1。 - Lucas S. G.

1
JSON.stringify(variable).startsWith("[")

当变量是数组时,此函数将返回 true。
JSON.stringify(variable).startsWith("{")

当变量是一个对象时,将返回true。


1

var jsonData = {
  Name:"Jonh Doe",
  Dept: {
    code: "cse",
    title: "Computer science & tech"
  },
  Courses: [
    {
      code: "cse123",
      name: "something"
    },{
      code: "cse123",
      name: "something"
    }
  ]
}

for(var item in jsonData){
  if(typeof jsonData[item] === "object"){
    var x = "";
    if(Array.isArray(jsonData[item])) x = "Array";
    else x = "object";
    console.log(item + " is " + x);
  }else{
    console.log(item + " is " + typeof jsonData[item]);
  }  
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接