javascript:如何用包含变量名称的字符串获得该变量的值

yk999 2008-11-20 09:13:40
var Example=1;

用什么办法可以:传入字符串"Example",传出变量的值1。

//解决办法1
var x=eval("Example");
return x;
//解决办法2
return window["Example"];
//2派生的
return this["Example"];

在不能用eval不能用window对象的情况下,请问还有其他办法吗?

另外再问一下,什么办法可以:传入Example这个变量,传出"Example"字符串。这个问题是没办法实现的,对吗?
...全文
1518 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fosjos 2008-11-20
  • 打赏
  • 举报
回复
javascript脚本执行一般都会有全局载体或者容器
所以
//解决办法2
return window["Example"];
//2派生的
return this["Example"];
可以解决问题

第二个问题,在初始化的时候加入名称
比如Example.name = "Example",封装成构造函数,很多js组件都是这样做的
yk999 2008-11-20
  • 打赏
  • 举报
回复
fosjos说的没错,但这个环境吧[]全部过滤了,很郁闷。
anyway非常感谢二位。
fosjos 2008-11-20
  • 打赏
  • 举报
回复
实体是指new Object()吗?

js语法中object也可以添加属性

比如obj["str1"] = "....";
for(var i in obj)
alert(i + ":" + obj[i]);
yk999 2008-11-20
  • 打赏
  • 举报
回复
现在用的就是全局变量
具体给个例子:
例如
var info="字符串1字符串2字符串3";

//需要为str1,str2,str3分别赋值
//我们可以
str1=截取第一段;
str2=截取第二段;
str3=截取第三段;
//但是数量很多的话就需要:
for(i++){
str<i>=截取第i段;
}
//这样的循环
//可是 str<i>=这句话怎么写才正确呢?这不就是我问的问题:传入字符串"str"+"1",传出变量的值str1。
-布谷鸟- 2008-11-20
  • 打赏
  • 举报
回复
如果是这样,我建议LZ不用传递变量,而是用全局变量来代替. 如果是传递变量的话,变量的个数也是不定的,不但变量名要判断,变量个数也得做判断,照你所说,连变量类型也得做判断. 无为地增加了系统开消.
LZ再考虑考虑.
yk999 2008-11-20
  • 打赏
  • 举报
回复
cuckoo1你好:
首先解释一下需求的环境,我这个开发容器禁止数组类型的变量,所以在储存数据时str[]要拆成str1,str2,str3这分开赋值。

我想设计一个循环来分别为形如str1,str2,str3,,,strn的变量赋值,就产生了题目中的问题。

这是变态环境决定的变态要求:)
转而说到这个环境,允许的变量类型,只包括基础类型(布尔,数值,字符,实体),而不包括扩展的类型(数组,函数),
所以fosjos的封装构造函数的办法我这里用不上。
但是非常感谢回复,请大家继续帮我想想,有办法我再加20分。
-布谷鸟- 2008-11-20
  • 打赏
  • 举报
回复
不知道LZ的这个需求手在什么地方?
一般传入的是值或指针, LZ还要知道传递过来的变量名?!

87,926

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧