Построение массива и отрицательные числа - PullRequest
3 голосов
/ 19 мая 2010

Я реализовывал алгоритм маршрутизации в javascript, но когда я присваиваю одну отрицательную переменную в массиве, я получаю эту ошибку: неверная длина массива.

var node = new Array()
node[0] = new Array(6,7)
node[1] = new Array(5,-4,8)
node[2] = new Array(-2) //Here, invalid array length

Я не знаю, как решить эту ошибку.

Ответы [ 4 ]

11 голосов
/ 19 мая 2010

Если вы пытаетесь инициализировать массив, который содержит только отрицательное число, используйте буквальный синтаксис:

var a = [-2];

Проблема с конструктором Array состоит в том, что когда он вызывается только с одним аргументом, это число используется как length нового массива, например ::

var b = new Array(5);
b.length; // 5

Я рекомендую придерживаться буквального синтаксиса , чтобы избежать этих двусмысленностей.

3 голосов
/ 19 мая 2010

Не объявляйте массивы таким образом!

var node = [6, 7];
1 голос
/ 19 мая 2010

Документация конструктора массива показывает следующее

var arr1 = new Array(arrayLength);
var arr2 = new Array(element0, element1, ..., elementN);

Итак, если вы используете только один параметр, он создает массив arrayLength; в противном случае, если вы используете более одного, он заполнит массив этими значениями.

Однако, как отмечали другие, лучше всего использовать буквенное обозначение *

var node = [
    [6, 7], 
    [5, -4 8],
    [-2]
];

* Буквенная нотация массива немного быстрее, чем new Array(), но это микрооптимизация и в большинстве случаев не очень важно.

1 голос
/ 19 мая 2010

Это потому, что один целочисленный аргумент устанавливает размер нового массива.

...