2012-04-30 210 views
0

我正尝试使用字符串更新nodejs中变量的内容。 在客户端JavaScript中,这是使用window [variable]完成的,但是因为nodejs中没有“窗口”。我尝试使用“this”和“module”,但是所有即时消息都是空对象。需要帮助的感谢NodeJS将字符串转换为变量

代码段:

var myVariable = 'Hello'; 
var exchangeVariable = 'myVariable'; 

this[exchangeVariable] = 'Hello World'; 

/* 
    myVariable should equal to 'Hello World!' 
*/ 

谢谢!

+1

以这种方式访问​​变量的目的是什么? – Jack

回答

8

这里的一些背景之前,我直接回答你的问题:

在JavaScript中,对象既可以使用点号(someObj.property)或它们编索引收录,你在你的例子做(someObj["property"]

在浏览器中,window是浏览器评估您的代码的全局上下文。节点使用variable called global

所以,如果你想引用变量您全局定义:

> var someGlobalVar = "hi"; 
> var myLookupKey = "someGlobalVar"; 
> global[myLookupKey] 
'hi' 

然而,这通常被认为是非常不好的做法(在节点和浏览器)。这有很多原因,但我只关注一个:

在节点中,模块(每个require d文件)应被视为不共享全局状态(并且在某些情况下,它们不能共享状态)。如果您试图跨文件共享状态,我鼓励您阅读节点文档的modules section

+0

奇怪的是,这个答案被否决......它LGTM,至少保持在0.我只是为了“触手的日子”头像而投票) – ixe013

+0

当有人认出它时,它总是让我微笑: ) – Nevir

0

您可以创建自己的变量散列或数组,并自己分配变量。

var myVariable = "Hello"; 
var varArray = new Array() 
    varArray["exchangeVariable"] = myVariable; 
+0

为什么是“数组”?空白对象会更适用于此用途。你没有利用Array的任何行为 – Nevir

+0

我说hash或array,我不知道他的用例。我只是选择编写一个数组作为例子。 – Jack