Прототип: массив - это объект, а не массив? - PullRequest
0 голосов
/ 10 августа 2010

Я кодировал 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 Ответ

2 голосов
/ 10 августа 2010

Array#without() не меняет ваш массив, он возвращает новый массив без указанных значений. Если вы хотите перезаписать массив, попробуйте

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

Javascript не идентифицирует массивы как имеющие тип Array при использовании оператора typeof, но вместо этого как объект. Если вы хотите определить, является ли переменная массивом, есть другие способы сделать это (см., Например, этот вопрос ).

...