Javascript 如何在对象属性上使用点访问器方案执行类似操作?

Javascript 如何在对象属性上使用点访问器方案执行类似操作?,javascript,Javascript,我的一个朋友讨论过这件事 考虑: var myString = new String("Hello world"); alert(myString["length"]); // 11 myString["simpleExample"] = true; alert(myString.simpleExample); // true myString["spaced Example"] = false; alert(myString["spaced Example"]); // false 将所

我的一个朋友讨论过这件事

考虑:

var myString = new String("Hello world");
alert(myString["length"]); // 11

myString["simpleExample"] = true;
alert(myString.simpleExample); // true

myString["spaced Example"] = false;
alert(myString["spaced Example"]); // false
将所有属性放入一个数组中

var props = ["length","simpleExample","spaced Example"];
现在这个,

for (var i = 0; i < props.length; i++) {
alert(myString[props[i]]);
}
// alerts each property individually: 11 true false
for(变量i=0;i
这不管用

for (var i = 0; i < props.length; i++) {

            alert(myString.props[i]);
}
// alerts each property individually: 11 true error/nothing
for(变量i=0;i
是否有任何方法可以通过点符号访问那些属性/键(其中有空格),或者干脆不访问数组([])运算符仅用于此

编辑:


这个问题在一次采访中被问到了我的朋友,采访者暗示了一个使用eval的解决方案,但我无法理解这一点。

myString.props[I]
的意思与
myString[props[I]]
完全不同
myString.props[i]
是具有
myString
props
属性的名称/索引
i
的项。由于
myString
(可能)没有属性
props
,这将导致错误

myString[..]
符号允许您使用表达式获取
myString
的属性,例如表达式
props[i]
。用点符号做同样的事情是没有办法的。点符号始终是文字符号
myString.props
总是指
myString
props
属性,而不是其他属性


点表示法还被进一步限制为需要有效变量名的属性名。例如,
obj.0
不起作用,因为
0
本身不是有效的标识符;i、 e.您也不能执行
var 0
。因此,您需要使用
obj[0]
。除此之外,
obj.0
obj[0]
是完全等效的,但是
[]
下标符号允许更广泛的表达式。

如果你允许自己使用
eval
(你真的,真的不应该因为这样一个微不足道的原因),那么它确实是可能的:

for (var i = 0; i < props.length; i++) {
    alert(eval("myString." + props[i]));
}
for(变量i=0;i

把它放在这里只是为了争论。不要在生产中使用这个。而且它仍然无法处理包含不允许字符的属性(如
“空格示例”
)。

使用alert(myString[props[i]])
或干脆no for array([])运算符仅用于此
-完全正确。也适用于动态特性。像
obj[someStr]
obj['someStr']
myString没有名为
props的属性,所以它当然不会work@RameshKotha-这正是“现在,这将”代码中所做的,所以他知道我做了同样的事情的可能的重复。在google chrome中,它只是不起作用。@ShirgillAnsari正如我所写的,当属性包含空格或其他不允许的字符时,它不会起作用。请仔细阅读问题“props[I]对应于string@Akshay我不知道你想告诉我什么。@Akshay发布的代码不起作用,因为语法完全错误,意味着与OP试图实现的不同。关键点中的空格问题甚至与此无关,如果这正是您想要解决的问题的话。