识别哪些对象是哪些 is complicated在 JavaScript 中,找出哪些对象是数组有一些 hacky solution .幸运的是,它在以下两种情况下都能正常工作:
Object.prototype.toString.call([]); // [object Array]
Object.prototype.toString.call(new Array()); // [object Array]
很好,看不到 [object Object]
!可悲的是,这种方法仍然失败了:
var arr = Object.create(Array.prototype);
Object.prototype.toString.call(arr); // [object Object]
至少可以这么说,这令人沮丧。我的 arr
对象具有数组的所有方法,它的功能类似于数组,就所有用途而言,它是一个数组。然而 JavaScript 不提供识别它的工具。
有什么方法可以判断一个对象是否继承自一个特定的原型(prototype)?我想您可以像这样遍历原型(prototype):
function inherits(obj, proto) {
while (obj != null) {
if (obj == proto) return true;
obj = Object.getPrototypeOf(obj);
}
return false;
}
inherits(Object.create(Array.prototype), Array.prototype); // true
但感觉有点老套。有没有更清洁的方法?
最佳答案
instanceof 怎么样?运算符(operator)?它为您的所有情况返回 true
:
[] instanceof Array //true
new Array() instanceof Array //true
Object.create(Array.prototype) instanceof Array //true
但是:
Object.create(Array.prototype) instanceof Object //also true
所以要小心。
关于javascript - 是否可以确定使用 Object.create 创建的对象是否继承自 JavaScript 中的 Array?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16728438/