问:
这个问题在这里已经有了答案: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+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。