如何检查 object 或 var 在 Javascript 中是否可遍历?

How to check if object or var is traversable in Javascript?

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

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

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

更新:

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

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

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

对于数组,使用 Array.isArray(),对于对象,您可以首先检查不 nulltypeof 是否等于 'object''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; }

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

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

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

items 可能是 Array Object, variable

例子

项目 = [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);
}