2010-05-19 4 views
3

Я реализовал алгоритм маршрутизации в 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 

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

ответ

11

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

var a = [-2]; 

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

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

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

+0

Это укусил меня раньше в каком-то унаследованном коде (нет, я не буду принимать вину!), Где список чисел (большие ключи базы данных, такие как номера кредитных карт, но не совсем) был в переменной JSP. Как ни странно, всякий раз, когда в списке было только одно число, браузер получал ошибку «из памяти» :-) – Pointy

+1

Это происходит, если единственным аргументом является целое число, оно будет работать со строкой. –

+0

Спасибо за совет! – zizzamia

3

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

var node = [6, 7]; 
1

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

1

array constructor documentation показывает следующее

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

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

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

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

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

Смежные вопросы