Определение имени переменной javascript из переменной

Привет, возможно ли установить имя var из другой переменной?

Например, у меня есть var test с разными номерами каждый раз, когда вызывается функция, поэтому я хочу, чтобы число было именем переменной, например. var test содержит '1', поэтому новая переменная будет var 1. Затем я хочу добавить слово к этому номеру "word", чтобы новая переменная стала var 1word.

var newNumber = 1;
var newNumber += 'word';
       ^ becomes ' 1 '
the new var name becomes ' 1word '

изменить:

function getNumber(newNumber) //  Gets a number, for this example say its the number '1' 
    {

        var newNumber += "something";  //The new varaible will be named "1something" (something can be any word)

    }

Надеюсь, я не сделал это слишком запутанным, спасибо.

Ответ 1

Вы можете поместить переменные в объект и проиндексировать объект с помощью строковых ключей.

Например:

var myData = { };
myData.x1 = 42;
alert(myData["x" + 1]);

Вы также можете инициализировать объект с помощью объектной нотации:

var myData = { key: 42 };

Ответ 2

Все в Javascript в основном просто ассоциативный массив. Это означает, что вы можете использовать обозначение доступа к массиву и точечную нотацию более или менее взаимозаменяемо. Нотация доступа к массиву предоставляет функцию, которую вы ищете:

object["name"]="foo"

задает свойство имени для данного объекта.

Если вы хотите создать глобальную переменную, используйте объект window

window["name"]="foo"

Вы также можете использовать выражение или переменную в квадратных скобках

window[someVaribale]="foo";
window["name_" + someVariable]="foo";

Ответ 3

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

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

var obj = new Object();
obj['original'] = 'name';
obj[obj]['original']] = 'another name';

Теперь объект имеет следующую структуру:

{
  'original': "name",
  'name': "another name" #variable named after original contents
}

Ответ 4

Есть простой способ достичь этого, если вы храните все свои переменные внутри объекта/массива. Помните, что в javascript массивы - это объекты, объекты - объекты и т.д.: p

var mystuff = {}; // new object literal

var numVariables = 10;

for (var i = numVariables - 1; i >= 0; i--){
    var newkey          = i + "_my_index";
    mystuff[newkey]     = "some stuff";
}

Ответ 5

Если вы используете числовые "переменные", например, в вашем примере (var 1; var 2;) вы должны использовать Array;

var list=[]; //declaration

list[1]="something"; //create a "variable" 1 with 'something' inside

list[2]="other thing"; //create another variable

var name=3;
var value="Hello";

list[name]=value; //works too

alert( list[1] ); //something

Если вы используете слова как "ключевые слова", вы должны использовать объекты вместо массивов

var list={}; //declaration

list["car1"]="Honda";
list["car2"]="Toyota";
list["fuit"]="Apple";

var name="greeting";
var value="Hello";

list[name]=value; //works too

alert( list["car2"] ); //Toyota

надеюсь, что вы поняли.

Ответ 6

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

var stuff = {}
stuff[1] = "one";
stuff["name"] = "david";

Ответ 7

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

Мой вопрос: почему вы хотите это сделать?

Ответ 8

Вы можете добиться этого с помощью встроенного метода: eval ( "ваш код javascript здесь" );

поэтому, возможно, в вашем случае это будет что-то вроде: eval ( "var yourNewName = \" "+ yourOldVarValue +" \""); затем смените старую переменную.

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

[не проверен, поэтому этот eval может даже не работать: S]