если у вас есть что-то вроде этого
var x='y';
var z='x';
если мы хотим получить значение x (т.е. y) из z, мы можем добиться такого же
eval (z), который даст вам "y".
Мой вопрос: если у меня есть x как массив вроде
var x=[a,b,c];
var z='x';
как я могу получить значения массива x, такие как x[0],x[1],x[2]
используя переменную z.
мы не можем использовать как eval(z[0])
, если бы мы дали как eval[z]
мы получим как [a,b,c]
но я хочу получить доступ к отдельным элементам массива напрямую. Каким образом это достигается,
Пожалуйста помоги.
Заранее спасибо.
Если x
является глобальным, вы можете использовать window
:
window[z][0] === a; // true
... но только если x
является глобальным, и это, откровенно говоря, не очень хорошая идея.
Чтобы сделать это с помощью неглобальных объектов, поместите x
на объект:
var obj = {x: [a, b, c]};
... и затем используйте obj
:
obj[z][0] === a; // true
В обоих случаях это работает, потому что вы можете получить доступ к свойству объекта в JavaScript с помощью "точечной нотации" и имени имени литерала (foo.bar
) или "заключенной в скобки записи" и имени свойства строки (foo["bar"]
), Во втором случае вы можете иметь любое выражение для строки.
Причина window
работает для глобальных переменных является то, что в JavaScript, все глобальные переменные свойства глобального объекта, а также в браузерах вы можете ссылаться, что глобальный объект с помощью символа window
. (Фактически, само window
является свойством глобального объекта, которое объект использует для обозначения самого себя).
Вы можете использовать окно
window[z][0]
Доступ через индексы может происходить только после eval
.
Пытаться:
var x=['a','b','c'];
var z='x';
eval(z)[0];//this will give a
Просто используйте eval(z)[0]
. У вас есть массив сразу после выполнения шага eval, а не раньше. Поэтому z[0]
не определен.