如何检查对象是否为数组? [复制]

问:

这个问题在这里已经有了答案:How do I check if a variable is an array in JavaScript? (24 个回答) 9 个月前关闭。

我正在尝试编写一个接受字符串列表或单个字符串的函数。如果它是一个字符串,那么我想将它转换为一个只有一个项目的数组,这样我就可以循环它而不必担心出错。

那么如何检查变量是否为数组呢?

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

答1:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

ECMAScript 标准中给出的查找 Object 类的方法是使用 Object.prototype 中的 toString 方法。

if(Object.prototype.toString.call(someVar) === '[object Array]') {
    alert('Array!');
}

或者您可以使用 typeof 来测试它是否是 字符串:

if(typeof someVar === 'string') {
    someVar = [someVar];
}

或者,如果您不关心性能,您可以对新的空数组执行 concat。

someVar = [].concat(someVar);

还有可以直接查询的构造函数:

if (somevar.constructor.name == "Array") {
    // do something
}

查看 T.J. Crowder’s 博客中的 a thorough treatment,正如他在下面的评论中所发布的那样。

查看 this benchmark 了解哪种方法效果更好:http://jsben.ch/#/QgYAV

对于所提出的问题,使用 ES6 从 @Bharath 将字符串转换为数组:

const convertStringToArray = (object) => {
   return (typeof object === 'string') ? Array(object) : object
}

认为:

let m = 'bla'
let n = ['bla','Meow']
let y = convertStringToArray(m)
let z = convertStringToArray(n)
console.log('check y: '+JSON.stringify(y)) . // check y: ['bla']
console.log('check y: '+JSON.stringify(z)) . // check y: ['bla','Meow']

+1 是的,toString 是可行的方法之一。我在这里做了一点总结:blog.niftysnippets.org/2010/09/say-what.html

如果您不想输入“[object Array]”,请使用 Object.prototype.toString.call( someVar ) === Object.prototype.toString.call( [] ) 或创建一个方便的函数来获取类型'不想输入 Object.prototype.toString.call

我使用在“现代浏览器”(即 IE9+ 和其他所有浏览器)中工作的 vanilla Array.isArray。对于旧浏览器支持,请使用 MDN developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 的 shim

生活在现代世界 - Array.isArray(obj)

答2:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

在现代浏览器中,您可以:

Array.isArray(obj)

(Supported by Chrome 5、Firefox 4.0、Internet Explorer 9、Opera 10.5 和 Safari 5)

为了向后兼容,您可以添加以下内容:

// Only implement if no native implementation is available
if (typeof Array.isArray === 'undefined') {
  Array.isArray = function(obj) {
    return Object.prototype.toString.call(obj) === '[object Array]';
  }
};

如果您使用 jQuery,您可以使用 jQuery.isArray(obj) 或 $.isArray(obj)。如果您使用 Underscore.js,您可以使用 _.isArray(obj)。

如果您不需要检测在不同帧中创建的数组,您也可以只使用 instanceof:

obj instanceof Array

以下是支持 Array.isArray 的浏览器的 more complete 列表

@NobleUplift:如果数组来自不同的框架,instanceof Array 将失败,因为来自不同框架的每个数组都有不同的 Array 构造函数和原型。出于兼容性/安全原因,每个框架都有自己的全局环境,其中包括全局对象。一帧的 Object 全局不同于另一帧的 Object 全局。 Array 全局变量也是如此。 Axel Rauschmayer talks more about this。

请注意,截至 2022 年,这得到了很好的支持(甚至支持许多浏览器版本):caniuse.com/?search=isArray 现在也是最快的方法:jsben.ch/QgYAV

答3:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

我将首先检查您的实现是否支持 isArray:

if (Array.isArray)
    return Array.isArray(v);

您也可以尝试使用 instanceof 运算符

v instanceof Array

如果在另一个框架中创建了 v(v 是 thatFrame.contentWindow.Array 类的实例),v instanceof Array 将返回 false。

具体来说:Array.isArray 被定义为 ECMAScript 5/Javascript 1.8.5 的一部分。

答4:

huntsbot.com – 高效赚钱,自由工作

jQuery 还提供了一个 $.isArray() 方法:

var a = [“A”, “AA”, “AAA”]; if($.isArray(a)) { alert(“a 是一个数组!”); } else { alert(“a 不是数组!”); }

请注意,jQuery 在内部使用 toString 方法:GitHub Source

答5:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

这是所有方法中最快的(支持所有浏览器):

function isArray(obj){
    return !!obj && obj.constructor === Array;
}

答6:

一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会

假设您在下面有这个数组:

var arr = [1,2,3,4,5];

JavaScript(新旧浏览器):

function isArray(arr) {
  return arr.constructor.toString().indexOf("Array") > -1;
}

或者

function isArray(arr) {
  return arr instanceof Array;
}

或者

function isArray(arr) {
  return Object.prototype.toString.call(arr) === '[object Array]';
}

然后像这样调用它:

isArray(arr);

JavaScript(Internet Explorer 9+、Chrome 5+、Firefox 4+、Safari 5+ 和 Opera 10.5+)

Array.isArray(arr);

jQuery:

$.isArray(arr);

角度:

angular.isArray(arr);

Underscore.js 和 Lodash:

_.isArray(arr);

答7:

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

Array.isArray 运行速度很快,但并非所有版本的浏览器都支持。

因此,您可以为其他人破例并使用通用方法:

    Utils = {};
    Utils.isArray = ('isArray' in Array) ?
        Array.isArray :
        function (value) {
            return Object.prototype.toString.call(value) === '[object Array]';
        }

答8:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

一个简单的功能来检查这个:

function isArray(object)
{
    return object.constructor === Array;
}

我会将其减少到一行 return object.constructor === Array - 但是您确定这只会对数组返回 true 吗?

可以用所有布尔表达式做到这一点。当我看到 if(x) return true; else return false 时让我发疯 :-) 即使它是倒退的,你也应该否定这个表达式。

如果对象未定义或为空,这将严重失败。

答9:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

正如 MDN 所说的 in here:

使用 Array.isArray 或 Object.prototype.toString.call 将常规对象与数组区分开来

像这样:

Object.prototype.toString.call(arr) === ‘[object Array]’,或者

Array.isArray(arr)

答10:

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

这个问题只有一个解决方案

x instanceof Array

其中 x 是变量,如果 x 是数组,它将返回 true,如果不是,则返回 false。

huntsbot.com – 高效赚钱,自由工作

答11:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

您可以使用 Array.isArray()。这是一个polyfill:

if (Array.isArray == null) {
  Array.isArray = (arr) => Object.prototype.toString.call(arr) === "[object Array]"
}

你能详细说明一下吗?例如,为什么“=”的两边都是“Array.isArray”? “Array.isArray”是一种方法。工作原理是什么?请通过 editing (changing) your answer 回复,而不是在评论中(没有“编辑:”、“更新:”或类似内容 - 答案应该看起来好像是今天写的)。

原文链接:https://www.huntsbot.com/qa/QQeg/how-can-i-check-if-an-object-is-an-array?lang=zh_CN&from=csdn

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值