2016-06-02 3 views
-3

Могу ли я узнать, почему, если возвращается запись второго уровня в многомерном массиве javascript undefined, если эта длина равна 1?
пример:индекс 0 на втором уровне javascript массивы

arr = Array(
    Array(1) 
) 

следующее вернет этот маловероятный результат: undefined, в то время как это предполагают, чтобы быть 1 (или, по крайней мере, это то, что я ожидал, что будет)

console.log(arr[0][0]) 

но когда у меня больше, чем просто запись на этом уровне (length>1) примерно так:

arr = Array(
    Array(1,2) 
) 

, а затем попробуйте: console.log(arr[0][0]), он возвращает 1 на этот раз.
какие-либо объяснения по этому вопросу или почему это происходит будем оценен
благодаря

+0

Чувствуется, что вы получаете голоса здесь, даже если вы отвечаете на вопросы отлично, но прохожий просто ненавидит ваш отступ или что-то в этом роде. Это случается все время. Вы не можете устранить его с помощью новых учетных записей. В JS-экземплярах массивы не инициируются, поэтому начальные значения не определены. Вам нужно связать «Array.prototype.fill()», если они вам понадобятся. – Redu

+1

Возможно, было три человека, которые думали, что вы должны были прочитать некоторую документацию раньше.Но вполне понятно, что это поведение запутывает, поэтому использование «Массив» обычно исключается. –

ответ

0

Вы должны проконсультироваться с documentation of the Array constructor:

arrayLength
Если единственный аргумент, переданный Array конструктора является целое число от 0 до 232-1 (включительно), это возвращает новый массив JavaScript с length, установленным для этого числа.

Array(1) не создает массив с элементом 1, он создает массив длины 1 с одним элементом: undefined.

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

[[1]] 

Это один массив, который содержит один массив, который содержит значение 1.

+0

спасибо, я прочитаю об этой документации по ссылке (спасибо также за проголосовало) –

+0

Не знаете, почему это было ниспроверено: -/ –

+1

@ Симо: Почему вы предполагаете, что deceze downvoted ваш вопрос? Люди, которые, как правило, отказались от ответа, не склонны отвечать на вопрос ... Если вы отклонили его ответ, то это очень плохой ход с вашей стороны. Ведь люди, которые отвечали, на самом деле пытались помочь вам ... –

0

Синтаксис для массива

[element0, element1, ..., elementN] 
new Array(element0, element1[, ...[, elementN]]) 
new Array(arrayLength) 

из синтаксиса секции на https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array

его внешний вид, как если aregument к массиву является одним целым, то это интерпретируется как длина, иначе он интерпретируется как содержание

Вот почему у вас есть пустая 2-мерная решетка на первом корпусе.

Надеюсь, это поможет. Улыбки

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