如何在Javascript中检查对象或var是否可以遍历?

时间:2016-09-05 13:23:28

标签: javascript jquery traversable

如何在Javascript或jQuery中检查对象或变量是否可以移动?

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

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

更新

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

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

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

4 个答案:

答案 0 :(得分:1)

对于数组,请使用Array.isArray(),对于对象,您可以先检查nulltypeof等于'object'

它想要的功能:

var isTraversable = o => Array.isArray(o) || o !== null && typeof o === 'object';

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
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分: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

答案 2 :(得分:0)

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

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

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

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

请注意,for..offorEach不同,它明确要求参数为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




答案 3 :(得分:0)

items可能是Array Objectvariable

示例

items = [1,2,3,4]; items = {name:' abc',email:' 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);
}