原型:Array是一个Object而不是数组?

时间:2010-08-09 20:40:07

标签: arrays prototype object

我一直在编写这样的javascript:

var Foo = {
    something: function() {

    },
    someValue: 0,
    someArray: [],
    someObject: {},
    anotherFunction: function (id) {
         this.someArray.push(id); // works - adds value to array someArray
    },
    removeSomething: function(id) {
         this.someArray.without(id); // doesn't work - value remains in array someArray
    }
};

如果在其中一个函数中,我将一个值推送到someArray(定义为[]),它会出现在数组中,但我无法使用Array.without()删除它。在使用typeof进行检查时,我发现它是一个对象,即使它显然是一个数组。是否有一些基本的理解,我不知道,我会留给你决定。

我真的很想将这个数组推出并弹出(没有)元素,而它被视为一个数组。为什么这被视为对象而不是数组?

1 个答案:

答案 0 :(得分:2)

Array#without()不会更改您的数组,它会返回一个没有指定值的新数组。如果要覆盖数组,请尝试

removeSomething: function(id) {
     this.someArray = this.someArray.without(id);
}

使用typeof运算符时,Javascript不会将数组标识为Array类型,而是将其标识为Object。如果要确定变量是否是数组,还有其他方法可以执行此操作(例如,请参阅this question)。