2

如何检查对象或变量在 Javascript 或 jQuery 中是否可遍历?

可遍历的对象或变量必须适用于每个likeobject.forEach()$.each(object, callback)jQuery。

实际上我想验证它然后在每个循环中使用它。

更新:

我正在寻找的解决方案是这样的:

if(is_traversable($var)) {
    $var.forEach(function(value, key) {
        console.log(value);
    }
}

你可以给我一个is_traversable()函数的实现。

4

4 回答 4

2

对于数组,使用Array.isArray()and 对于对象,你可以先检查 notnulltypeofis equal to 'object'or 'function'

它想要的功能:

var isTraversable = o => Array.isArray(o)
     || o !== null && ['function', 'object'].includes(typeof o);

console.log(isTraversable());               // false
console.log(isTraversable(undefined));      // false
console.log(isTraversable(null));           // false
console.log(isTraversable(''));             // false
console.log(isTraversable(0));              // false
console.log(isTraversable('a'));            // false
console.log(isTraversable(42));             // false
console.log(isTraversable(/./));            // false
console.log(isTraversable([]));             // true
console.log(isTraversable([1]));            // true
console.log(isTraversable({}));             // true
console.log(isTraversable({ a: /./ }));     // true
console.log(isTraversable(function () {})); // true
console.log(isTraversable(() => true));     // true
.as-console-wrapper { max-height: 100% !important; top: 0; }

于 2016-09-05T13:25:32.887 回答
0

您可以使用以下内容并创建适当的函数/验证:

var myArray = ["This is a test"];
var myObject = {"test" : "This is a test"};

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

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

看看这个:Object.toString

于 2016-09-05T13:32:20.330 回答
0

forEach和朋友以通用方式实现,为了符合条件,他们的论点

  • 必须支持 getter 运算符 ( [])
  • 并且必须具有数字length属性。

也就是说,任何字符串和任何对象.length都可以工作:

isIterable = x => x && !isNaN(x.length);

请注意,for..of与 不同的是forEach,它明确要求有一个参数Symbol.iterator

a = {
    length: 10,
    5: 555
};

[].forEach.call(a, x => console.log(x)); // fine

for(var x of a) console.log(x); // no way

于 2016-09-05T13:32:21.587 回答
0

items可能Array Objectvariable

例子

项目 = [1,2,3,4];项目= {名称:'abc',电子邮件:'abc@xyz.com'}

var items;

if (items && items instanceof Array) { // if Array
  items.forEach(function(value) {
    console.log(value);
  });
} else if (items && items instanceof Object) { // if Object
  for (key in items) {
    console.log(items[keys]);
  }
} else { // if variable 
  console.log(items);
}

于 2016-09-05T13:46:19.040 回答