Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的变量_Javascript_Variable Variables - Fatal编程技术网

JavaScript中的变量

JavaScript中的变量,javascript,variable-variables,Javascript,Variable Variables,据我所知,PHP中已经存在此功能。让我们看看以下php代码: $color = 'red'; $$color = 'dark'; 功能说明: 有时可以方便地使用变量名。也就是说,可以动态设置和使用的变量名。变量接受变量的值并将其视为变量名。在上面的示例中,red可以用作变量的名称。此时,在PHP符号树中定义并存储了两个变量:$color,内容为“red”,$red,内容为“dark” 我的问题 这可以在java脚本中完成吗?想到三种不同的技术,每种技术都有警告,并且(第二种除外)使用: 1)

据我所知,PHP中已经存在此功能。让我们看看以下php代码:

$color = 'red';
$$color = 'dark';
功能说明: 有时可以方便地使用变量名。也就是说,可以动态设置和使用的变量名。变量接受变量的值并将其视为变量名。在上面的示例中,red可以用作变量的名称。此时,在PHP符号树中定义并存储了两个变量:
$color
,内容为
“red”
$red
,内容为
“dark”

我的问题
这可以在java脚本中完成吗?

想到三种不同的技术,每种技术都有警告,并且(第二种除外)使用:

1) 您可以使用
var
关键字在代码中的任意位置用JavaScript声明新变量:

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
s在创建函数的上下文时生效,而不是在代码中出现的位置。更多:

2) 如果您只是分配给一个从未在任何地方声明过的自由符号,那么您将创建一个隐式全局变量(而不是一个约束到当前范围的变量),这通常是一个坏主意。更多:

3) 您可以做的另一件事是拥有一个对象,它是您想要跟踪的各种变量的容器。只需指定以下属性,即可在对象上创建新属性:

var data = {};    // A blank object
data.foo = "bar"; // Now `data` has a `foo` property
当您需要跟踪脚本完全不知道的数据(例如基于用户输入)时,此技术特别方便,因为您可以使用点符号和如上所述的文字(
data.foo
),也可以使用括号符号和字符串(
data[“foo”]
)。在后一种情况下,字符串可以是任何表达式的结果,因此所有这些都会在
数据上创建
foo
属性:

// 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;

我想到了三种不同的技术,每种技术都有其警告和用途(第二种除外):

1) 您可以使用
var
关键字在代码中的任意位置用JavaScript声明新变量:

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
s在创建函数的上下文时生效,而不是在代码中出现的位置。更多:

2) 如果您只是分配给一个从未在任何地方声明过的自由符号,那么您将创建一个隐式全局变量(而不是一个约束到当前范围的变量),这通常是一个坏主意。更多:

3) 您可以做的另一件事是拥有一个对象,它是您想要跟踪的各种变量的容器。只需指定以下属性,即可在对象上创建新属性:

var data = {};    // A blank object
data.foo = "bar"; // Now `data` has a `foo` property
当您需要跟踪脚本完全不知道的数据(例如基于用户输入)时,此技术特别方便,因为您可以使用点符号和如上所述的文字(
data.foo
),也可以使用括号符号和字符串(
data[“foo”]
)。在后一种情况下,字符串可以是任何表达式的结果,因此所有这些都会在
数据上创建
foo
属性:

// 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;

它的可能复制品有时可能很方便,但它是一个巨大的质量!可能的复制可能的复制有时可能很方便,但它是一个巨大的质量!我可以在日志中看到的可能的重复项,您做对了,但无法使用变量
document.getElementById(“v”).innerHTML=red
它给出了一个错误
无法将innerHTML的属性设置为NULL
我可以在日志中看到你做对了,但是不能使用变量
document.getElementById(“v”)。innerHTML=red它给出了一个错误
无法将innerHTML的属性设置为NULL
无法在您的答案中找到我要查找的内容。无论如何谢谢。@SamiAl Subhi:我认为上面的第三个选项最接近您在编辑中描述的PHP概念<代码>s=“foo”
,然后使用
s
作为变量名称:
data[s]=42
表示
data.foo
的值为
42
@SamiAl Subhi:第三个选项是您应该使用的方式。不要创造一堆垃圾的全局!但是如果您真的需要,您可以将这些变量存储在
窗口中,而不是
数据中,这将使它们成为全局变量。@ThiefMaster我想为变量
窗口[color]=document.getElementById(“v”)
分配一个对象,我将在代码中的不同位置多次使用它。因此,我想第三种方法对我来说是行不通的。我说得对吗?@SamiAl Subhi:效果很好<代码>窗口
是一个对象,就像我的
数据
示例一样。例如,假设
color
是一个包含字符串
'red'
的变量,那么
window[color]=document.getElementById(“v”)
将愉快地创建一个引用元素的全局变量
red
。Globals是
窗口
对象的属性,因此
color='red'
窗口[颜色]=42
警报(窗口红色);/*警报42*/
警报(红色);/*另外还有警报42*/
警报(窗口[颜色]);/*同时提醒42*/
最好避免使用全局变量,但如果您必须使用它们,这将起作用。在您的答案中找不到我要查找的内容。无论如何谢谢。@SamiAl Subhi:我认为上面的第三个选项最接近您在编辑中描述的PHP概念<代码>s=“foo”
,然后使用
s
作为变量名称:
data[s]=42
表示