2013-10-09 3 views
0

В результате [] [[]] является неопределенным , где, как это [[]] [] бросает SyntaxError: Неожиданный маркер]. Любое пояснение?Разница между [] [[]] и [[]] [] в JavaScript?

+0

Кстати, почему вам нужно определить что-то вроде этого? – Kaf

+1

Вы попробовали? Что? Это массив с одним элементом (пустым массивом). Затем [[]] [] получит первый элемент, но вам нужно предоставить индекс (вот почему синтаксическая ошибка, он анализирует «]» вместо числа). –

+0

'([]) ['array object somekey, т.е. []']' дает undefined .. и '([[]]) []' означает 'no key' throws' SyntaxError: синтаксическая ошибка' – rab

ответ

4

используется синтаксис object[key], чтобы получить свойство objectkey, которое должно содержать key внутри [], иначе будет синтаксическая ошибка.

[][[]], объект пустой массив [], а ключ - еще один пустой массив [].

[[]][], объект представляет собой массив с пустым массивом внутри него, в то время как внутри [] нет ключа.

2

[] определяет пустой массив, поэтому [][[]] можно переписать в виде:

var a = []; 
var b = []; 
var c = a[b]; 

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

Однако [[]][] сломана - ближайший это может быть написано от руки является:

var a = []; 
var b = []; 
[b]a; 

... что это нонсенс код.

2

Я не могу понять, почему кто-то когда-либо хотите использовать что-то вроде этого, но вот объяснение:

Случай 1:

[] является пустой массив. Добавляя к нему [n] ([][n]), вы ссылаетесь на n-й элемент. n в вашем случае: []. Интерпретатор пытается преобразовать это в полезное значение и заканчивается пустой строкой (""). Таким образом, вы на самом деле пытаетесь ссылаться на [][""], который является undefined.

Случай 2:

[[]] является пустым массивом внутри пустого массива. Добавляя к нему [n] ([[]][n]), вы ссылаетесь на n-й элемент внешнего массива. Вам необходимо указать индекс n, иначе он выдает сообщение об ошибке, которое происходит в вашем случае.

1

Я не могу понять, почему вы должны использовать это, но вот мое объяснение:

[[]] новый Array (новый Array()), который представляет собой массив с одним элементом, пустой массив.

[] - пустой массив, поэтому вы можете сделать [] [2] или [] [0], и он возвращает undefined. Второй [] - индекс.

Итак, в [] [[]] вы ищете индекс, индекс [].

[][0] == [][[]] 

Но в [[]] [] индекс пуст, эквивалентно [1,2,3] [] -> SyntaxError: Неожиданный маркер]

0

ok. просто вы должны получить доступ к массиву с помощью ключа. иначе это вызовет синтаксическую ошибку.

[][[]] - массив определен, и вы получаете доступ к ключу [] из этого массива, который не определен.

[[]][] - задан массив, и вы не передаете какой-либо ключ для доступа к этому массиву - синтаксическая ошибка.

0

Я предполагаю преобразование типов происходит:

[][ 
    // an index is expected here 
    [] // so javascript probably tries to get a number from this empty array 
] 

Это может быть эквивалентно:

[][+[]] // +[] gives 0 

В то время как в этом шаблоне [[]][] две массивы объявляются бок о бок.

+1

На самом деле пытается преобразуйте его в строку, в результате получится [] [""]. Вы можете попробовать это. var arr = []; arr [""] = "test"; console.log (обр [[]]); – Butt4cak3

+0

@ Butt4cak3 Ну, вы, кажется, правы :) – leaf

0

Объект JavaScript имеет свойства, связанные с ним. Вы получаете доступ к свойствам объекта с простой нотной обозначением или скобкой, а если non existing key ссылается, это дает значение undefined.

var obj = {}; 
obj[ 'key' ] 

и одна важная вещь в том, что в массиве JavaScript является объектом

console.log([] instanceof Object) // gives true so it act like object 

и самое смешное, что мы проходим, как показано ниже.

var keyCanbeFunction = function(){}; 
var keyCanbeObject = {}; 
var keyCanbeArray = [] ; 

console.log(obj[ keyCanbeArray ]) // gives undefined, that key not exists 

и 1-й случай:

var obj = []; 
obj[ keyCanbeArray ] // gives undefined 

и второй случай:

var obj = [[ ]] 
obj[]; // where is key ??? 
Смежные вопросы