Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何确定某个对象是数组还是对象?_Javascript_Arrays_Object - Fatal编程技术网

Javascript 如何确定某个对象是数组还是对象?

Javascript 如何确定某个对象是数组还是对象?,javascript,arrays,object,Javascript,Arrays,Object,数组和对象是唯一的输入。是否有一个简单的函数可以确定一个变量是数组还是对象?我怀疑还有许多其他类似的答案,但这是一种方法: if ({}.toString.call(obj) == '[object Object]') { // is an object } if ({}.toString.call(obj) == '[object Array]') { // is an array } 这可以转化为一个漂亮的函数: function typeOf(obj) { return {

数组和对象是唯一的输入。是否有一个简单的函数可以确定一个变量是数组还是对象?

我怀疑还有许多其他类似的答案,但这是一种方法:

if ({}.toString.call(obj) == '[object Object]') {
  // is an object
}

if ({}.toString.call(obj) == '[object Array]') {
  // is an array
}
这可以转化为一个漂亮的函数:

function typeOf(obj) {
  return {}.toString.call(obj).match(/\w+/g)[1].toLowerCase();
}

if (typeOf(obj) == 'array') ...
这适用于任何类型:

if (typeOf(obj) == 'date') // is a date
if (typeOf(obj) == 'number') // is a number
...

我怀疑还有许多其他类似的答案,但这是一种方式:

if ({}.toString.call(obj) == '[object Object]') {
  // is an object
}

if ({}.toString.call(obj) == '[object Array]') {
  // is an array
}
这可以转化为一个漂亮的函数:

function typeOf(obj) {
  return {}.toString.call(obj).match(/\w+/g)[1].toLowerCase();
}

if (typeOf(obj) == 'array') ...
这适用于任何类型:

if (typeOf(obj) == 'date') // is a date
if (typeOf(obj) == 'number') // is a number
...
(数组的变量instanceof)
将为数组返回true

您也可以使用
variable.isArray()
,但较旧的浏览器不支持此功能。

(数组的变量实例)
将为数组返回true


您也可以使用
变量.isArray()
,但较旧的浏览器不支持此功能。

您可以使用
数组.isArray()

只要你知道,这将是一个或另一个你设置。否则,请将其与
typeof
结合使用:

if(typeof myVar === "object") {
    if(Array.isArray(myVar)) {
        // myVar is an array
    } else {
        // myVar is a non-array object
    }
}

您可以使用
Array.isArray()

只要你知道,这将是一个或另一个你设置。否则,请将其与
typeof
结合使用:

if(typeof myVar === "object") {
    if(Array.isArray(myVar)) {
        // myVar is an array
    } else {
        // myVar is a non-array object
    }
}
首先检查它是否为数组,然后检查它是否为对象类型

if(variable instanceof Array)
{
//this is an array. This needs to the first line to be checked 
//as an array instanceof Object is also true

}
else if(variable instanceof Object)
{
//it is an object
}
首先检查它是否为数组,然后检查它是否为对象类型

if(variable instanceof Array)
{
//this is an array. This needs to the first line to be checked 
//as an array instanceof Object is also true

}
else if(variable instanceof Object)
{
//it is an object
}

你检查过这个吗?-。。值得一看你检查过这个吗?-。。worth Looking如果对象通过帧传递失败,因为它将从数组和对象的不同实例创建。如果对象通过帧传递失败,因为它将从数组和对象的不同实例创建。+1,但是您应该使用
Object.prototype.toString
,因为全局/窗口对象的
toString
方法可能不会产生适当的结果。:-)我想这取决于你需要多少浏览器支持。这应该适用于现代浏览器AFAIK。它默认为
window.toString
,这是一个对象。否则我更喜欢
{}.toString
。但你是对的。在Firefox中,
window.toString.call(obj)
返回
[xpconnect-wrapped-native-prototype]
。请注意,
window
是一个主机对象,因此不必遵守本机对象的规则。另外,不是对象的实例(它也没有ECMA-262定义的
[[Prototype]]
属性),它是一个特殊的对象,比任何其他对象都早。只是更新为使用适合所有现代浏览器的(较短的)方式。AFAIK-only IE7-具有可以通过
({}).toString
轻松解决的问题。我一直在使用
窗口。toString
在我需要针对的浏览器中没有问题,但我看到了问题。我想最后一个警告是,这可能不适用于主机对象,它甚至可能会抛出错误,但在OP的情况下应该是可以的。+1,但是您应该使用
Object.prototype.toString
,因为全局/窗口对象的
toString
方法可能不会产生适当的结果。:-)我想这取决于你需要多少浏览器支持。这应该适用于现代浏览器AFAIK。它默认为
window.toString
,这是一个对象。否则我更喜欢
{}.toString
。但你是对的。在Firefox中,
window.toString.call(obj)
返回
[xpconnect-wrapped-native-prototype]
。请注意,
window
是一个主机对象,因此不必遵守本机对象的规则。另外,不是对象的实例(它也没有ECMA-262定义的
[[Prototype]]
属性),它是一个特殊的对象,比任何其他对象都早。只是更新为使用适合所有现代浏览器的(较短的)方式。AFAIK-only IE7-具有可以通过
({}).toString
轻松解决的问题。我一直在使用
窗口。toString
在我需要针对的浏览器中没有问题,但我看到了问题。我想最后一个警告是,这可能不适用于主机对象,它甚至可能会抛出错误,但在OP的情况下应该可以。