Переменные в JavaScript - PullRequest
       21

Переменные в JavaScript

1 голос
/ 15 января 2012

насколько мне известно, эта функция уже существует в PHP. Давайте посмотрим на следующий код PHP:

$color = 'red';
$$color = 'dark';

описание функции:

Иногда удобно иметь имена переменных переменных. То есть имя переменной, которое можно задавать и использовать динамически. Переменная переменная принимает значение переменной и обрабатывает его как имя переменной. В приведенном выше примере, красный , может использоваться как имя переменной. На данный момент две переменные были определены и сохранены в дереве символов PHP: $color с содержимым "red" и $red с содержанием "dark".

мой вопрос

это можно сделать в Java Script?

Ответы [ 2 ]

6 голосов
/ 15 января 2012

На ум приходят три различных метода, каждый со своими предупреждениями и (кроме второго) использует:

1) Вы можете объявить новую переменную в JavaScript в любом месте кода, используя ключевое слово var:

var $color = 'red';

На самом деле переменная определяется в пределах области действия, в которой находится var, даже выше оператора var, то есть эти две функции идентичны, даже если онивыглядят немного иначе:

function foo() {
    doSomething();
    var x = 5;
    x += doSomethingElse();
    return x;
}

function foo() {
    var x;

    doSomething();
    x = 5;
    x += doSomethingElse();
    return x;
}

Это потому, что все var вступают в силу при создании контекста для функции, а не там, где они появляются в коде.Дополнительно: Плохо, неправильно понято var

2) Если вы просто назначите свободный символ, который нигде не был объявлен, вы создадите неявную глобальную переменную(не ограниченный текущей областью), что, как правило, плохая идея.Подробнее: Ужас неявных глобалов

3) Еще одна вещь, которую вы можете сделать, это иметь объект, который является контейнером для различных переменных, которые вы хотите отслеживать.Вы можете создать новые свойства для объекта, просто назначив их:

var data = {};    // A blank object
data.foo = "bar"; // Now `data` has a `foo` property

Этот метод особенно удобен, когда вам нужно отслеживать данные, о которых ваш скрипт совершенно не знает, например, на основе пользовательского ввода, потому что выможно использовать либо точечную нотацию и литерал, как указано выше (data.foo), либо вы можете использовать нотацию в скобках и строку (data["foo"]).В последнем случае строка может быть результатом любого выражения, поэтому все они создают свойство foo для data:

// Dotted notation with a literal
data.foo = 42;

// Bracketed notation with a literal string
data["foo"] = 42;

// Bracketed notation with a string coming from a variable
s = "foo";
data[s] = 42;

// Bracketed notation with a string coming from an expression
s = "o";
data["f" + s + s] = 42;
4 голосов
/ 15 января 2012
var color = 'red';
window[color] = 'dark';
console.log(color, red);
...