相当于 php $$ 美元的 javascript
- 我在名为 validate 的函数中声明了一个名为 cont 的局部变量。
- 我正在从 validate 内部调用一个函数进程。
- 我将字符串“cont”作为参数发送给验证函数。
- 在使用字符串“cont”的处理函数中,我想访问javascript局部变量的值,例如window['cont']。但我不确定。
- 我想做的是尝试访问 php 中的 $GLOBALS 或 $$ 等变量。
这是我所做的一个例子。
<script>
function process(str)
{
alert(window[str]);
}
function validate()
{
var cont='once there lived a king named midas';
process('cont')
}
validate();
</script>
原因是我将大部分表单作为ajax 进行。我不想创建这样的请求字符串。
var param = "command=insert&content=" + encodeURIComponent(cont);
我想这样做。
var param = makeParam('command,[insert],content,(cont)');
我在 makeparam 中所做的是使用正则表达式来提取键值对。 所以我从 (cont) 获取字符串 cont 并将其替换为窗口变量,如 window[cont]。 cont 将包含字符串“cont”。
那么我们如何通过使用变量名称作为字符串来获取变量的内容呢?
所以我正在寻找相当于 php 的 $$
Edited
代码的一部分,其中我提取 (cont) 内部的 cont,这意味着我想要 () 之间的字符串内容。
nxt = str[i+1].match(/\((.*)\)$/)
if(nxt)param += '=' + encodeURIComponent(window[nxt[1]]);
param 的内容将是
"command=insert&content=once there lived a king"
// assume that once there lived a king is encoded
编辑。 Note2.
经过几次回复后,我正在编辑代码以添加此内容。
我正在尝试像 php 中的 $GLOBALS 那样做。
我还没有尝试过 $GLOBALS 是否也可以包含局部变量。
并了解到本地范围不会进入 $GLOBALS。
阅读 Felix King 的更新后进行更新。
我想使用一个函数来构造尽可能简单的查询字符串。像下面这样。
var param = makeParam('command,insert,/title/,/keywords/,/description/,mode,[1],fckcontent,(cont)');
// if it is a text without // or () then the it is a straight key value pair. so i will do comment=insert.
//if it is /title/ then the key is title and its value is an input elements value with id as title so title=getElementById('title')
//if it is mode,[1] then mode is the key and 1 is its direct value//
//if it is fckcontent,(cont) then fckcontent is the key and cont is a javascript local variable which will contain html content from a WYSIWYG editor.
// a sample result will be
var param = "command=insert&keywords=somekeywords&description=somedescription&mode=1&fckcontent=<p>once there lived a king<p>
然后 casablanca 声明 $GlOBALS 将不包含局部范围变量,这与 javascript 中的方式相同。这是正确的。
- I have declared a local variable named cont in a function named validate.
- I am calling a function process from inside validate.
- I am sending the string 'cont' as argument to validate function.
- In the process function using the string 'cont' i want to access the javascript local variable's value like window['cont']. But i get undefined.
- What i am trying to do is trying to access variables like $GLOBALS in php or $$.
Here is an example of what i did.
<script>
function process(str)
{
alert(window[str]);
}
function validate()
{
var cont='once there lived a king named midas';
process('cont')
}
validate();
</script>
The reason is i do most of the forms as ajax. i dont want to make a request string like this.
var param = "command=insert&content=" + encodeURIComponent(cont);
i want to do like this.
var param = makeParam('command,[insert],content,(cont)');
what i do in makeparam is i use regular expression to extract key value pairs.
so i get the string cont from (cont) and i substitute it into window variable like window[cont]. cont will have the string 'cont'.
so how do we get the content of a variable by using the name of the variable as string?
so i am looking for javascript equivalent of php's $$
Edited
a part of the code where i extract cont which is inside (cont) which means i want the content of the string between ().
nxt = str[i+1].match(/\((.*)\)$/)
if(nxt)param += '=' + encodeURIComponent(window[nxt[1]]);
the content of param would be
"command=insert&content=once there lived a king"
// assume that once there lived a king is encoded
Edit. Note2.
After few more responses i am editing the code to add this.
I am trying to do like $GLOBALS in php.
I haven't tried whether $GLOBALS would cantain local variables too.
and learned that local scope will not come into $GLOBALS.
Update after reading Felix King's Update.
I want to use a function which will construct a query string as simpler as possible. like the following.
var param = makeParam('command,insert,/title/,/keywords/,/description/,mode,[1],fckcontent,(cont)');
// if it is a text without // or () then the it is a straight key value pair. so i will do comment=insert.
//if it is /title/ then the key is title and its value is an input elements value with id as title so title=getElementById('title')
//if it is mode,[1] then mode is the key and 1 is its direct value//
//if it is fckcontent,(cont) then fckcontent is the key and cont is a javascript local variable which will contain html content from a WYSIWYG editor.
// a sample result will be
var param = "command=insert&keywords=somekeywords&description=somedescription&mode=1&fckcontent=<p>once there lived a king<p>
and then casablanca stated that $GlOBALS will not contain local scope variables and that is the same way in javascript. that's right.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
http://www.i-marco.nl/weblog/ archive/2007/06/14/variable_variables_in_javascri - 发现这可能对您有帮助,或者
https:/ /stackoverflow.com/questions/592630/javascript-variable-variables
http://www.i-marco.nl/weblog/archive/2007/06/14/variable_variables_in_javascri - found that, which might help you, or
https://stackoverflow.com/questions/592630/javascript-variable-variables
您的代码是正确的,但您的期望是错误的。 PHP 中的
$GLOBALS
不包含局部变量,同样的情况也适用于 JavaScript 中的window
。cont
是validate
本地的,因此显然不能从process
访问它。在 PHP 中,您需要在函数内显式地将变量声明为全局变量。在 JavaScript 中,它的工作方式正好相反:使用
var
声明的任何变量都是局部的,任何未声明的变量都是全局的。Your code is correct, but what you're expecting is wrong.
$GLOBALS
in PHP does not include local variables, and the same thing applies towindow
in JavaScript.cont
is local tovalidate
, so obviously it can't be accessed fromprocess
.In PHP, you need to explicitly declare a variable as global inside a function. In JavaScript, it works the other way round: any variables declared using
var
are local, anything that is not declared is global.正如其他人所建议的,您将无法在代码中的其他地方访问本地范围内的变量。
您最初发布的代码是:
另一种选择(而不是将所有内容都放在“窗口”变量映射中)是创建您自己的映射。
所以你的代码将变成:
所有这一切都是在创建一个全局映射,你可以添加它并使用字符串进行索引。
As others have suggested, you wont be able to access variables in local scope elsewhere in your code.
The code you originally posted was:
Another option (rather than putting everything in the 'window' variables map), is to create your own map.
So your code would become:
All this is doing is creating a global map which you can add to and index using strings.
cont
是在函数的本地作用域中定义的,而不是在全局作用域中定义的。要么只做(不带
var
),要么更新:
但是为什么你要在解析字符串时经历这么多麻烦呢?你为什么不这样做:
cont
is defined in the local scope of the function, not in global scope. Either do just(without
var
) orUpdate:
But why do you want to go through so much trouble with parsing strings? Why don't you do:
我试图理解为什么您需要将变量作为字符串传递,以及为什么您想通过
window
对象访问cont
。这看起来就像您期望代码执行的操作:仅供参考:声明全局变量通常被认为是不好的做法,特别是在您似乎不需要它们的情况下。 (不过,我可能会错;我不完全确定你想要完成什么)
编辑:我建议使用一些函数并传递一些变量,而不是用 < code>eval() 式的变量引用。例如,您可以像这样实现
makeParam
:但是您可能希望将
cont
传递到makeParam
函数中。I'm trying to understand why you need to pass the variable as a string and why you want to access
cont
via thewindow
object. This does what it looks like you expected your code to do:FYI: It is generally considered bad practice to declare global variables, especially in a case like this where you don't appear to need them. (I could'd we wrong, though; I'm not entirely sure what you're trying to accomplish)
Edit: I would suggest using some functions and passing some variables around rather than mucking around with
eval()
-esque variable references. For example, you could implementmakeParam
like so:But you'd probably want to pass
cont
into yourmakeParam
function.