如何检查 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()
,对于对象,您可以首先检查不 null
和 typeof
是否等于 '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);
}
如何检查对象或变量在 Javascript 或 jQuery 中是否可遍历?
可遍历的对象或变量必须在 中适用于每个 ,例如 jQuery 中的 object.forEach()
和 $.each(object, callback)
。
实际上我想验证它然后在每个循环中使用它。
更新:
我寻找的解决方案是这样的:
if(is_traversable($var)) {
$var.forEach(function(value, key) {
console.log(value);
}
}
你可以给我一个 is_traversable()
函数的实现。
对于数组,使用 Array.isArray()
,对于对象,您可以首先检查不 null
和 typeof
是否等于 '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);
}