这里为什么是undefined?

浴火_凤凰 2009-11-11 07:21:34
<script>
var a={aa:111,bb:"ssssss",cc:true};
for(var i in a){
alert(a[i]);
alert(a.i);这里为什么是undefined?
}
</script>
...全文
199 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
jianshao810 2009-11-12
  • 打赏
  • 举报
回复
按理说可以。不过认真看看好像 有问题。你alert[i]看看
wcwtitxu 2009-11-12
  • 打赏
  • 举报
回复
// 再强调一下:  theObject 的自定义属性只有一个:  propertyName
var theObject = { propertyName: "propertyValue" };


var a = "propertyName"; // a 的值 是 "propertyName"
var b = "propertyName"; // b 的值也是 "propertyName"
var c = "propertyName"; // c 的值也是 "propertyName"
var d = "propertyName"; // d 的值也是 "propertyName"
var e = "propertyName"; // e 的值也是 "propertyName"
var f = "propertyName"; // f 的值也是 "propertyName"
// ...

/*
难道就因为 a, b, c, d, e, f, ... 的值是 "propertyName"
你就指望 theObject 平白无故会多出来这么多属性

theObject.a,
theObject.b,
theObject.c,
theObject.d,
theObject.e,
theObject.f,
...

*/
wcwtitxu 2009-11-12
  • 打赏
  • 举报
回复


// theObject 是个 Object. 有个属性: propertyName, 属性值是: "propertyValue"
var theObject = { propertyName: "propertyValue" }

// str 是个字符串
var str = "propertyName";

// str 跟 theObject 本来是两个互不相干的 variable (后面 theObject.str 能不是 undefined 么)
//---------------


alert(theObject.propertyName); // 看到 "propertyValue", 没有什么问题
// propertyName 是 theObject 的属性当然能看到啦

// 当然也可以这样
alert(theObject["propertyName"]) // 看到 "propertyValue", 也没有什么问题

// 更可以这样
alert(theObject[str]) // 看到 "propertyValue", 也没有什么问题

// 就不能这样
alert(theObject.str); // 看到 undefined
// alert(window.str);

// 仔细对比一下这四行, 应该能想到为什么了
草根醉秋意 2009-11-12
  • 打赏
  • 举报
回复
在循环体内,i是个变量,字符i是标识符,但是i的值不是标识符。
a.i是获取对象a的i属性,相当于a["i"],对象a没有定义i这个属性,所以是undefined
gkw521 2009-11-12
  • 打赏
  • 举报
回复
在这里a.i实际上等于a['i'],所以当然是undefined了
浴火_凤凰 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wcwtitxu 的回复:]
JScript codevar a={aa:111,bb:"ssssss",cc:true, i:"xxxx"};for(var iin a){
alert(a[i]);
alert(a.i);这里为什么是undefined?
}
这很奇怪么? 你给a加个属性 i 不就每次都有值了.

a 本来就没定义 名为 i 的属性.
alert(a.i) 怎么会不是 undefined
[/Quote]

i是有值的,可以测试下面代码

<script>
var a={aa:111,bb:"ssssss",cc:true};
for(var i in a){
alert(i);
alert(a.i);
alert(a[i]);
}

</script>
浴火_凤凰 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 click_me 的回复:]
JScript code
对象成员存取符 有两种.和[] 两者的区别就是前者.右边运算元必须是标识符 而后者[]
里可以是变量 直接量 或表达式
而for(var iin a) 这个a是定义的变量 所以就用a[i]
[/Quote]
谢谢了,我知道a[i]可以,但是请问:
a.i这里的i难道不是标示符吗?
标示符的定义不就是可以使用字母、数字、下划线和$符号吗?
李子做IT 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wcwtitxu 的回复:]
JScript code// theObject 是个 Object. 有个属性: propertyName, 属性值是: "propertyValue"var theObject= { propertyName:"propertyValue" }// str 是个字符串var str="propertyName";// str 跟 theObject 本来是两个互不相干的 variable ?-
[/Quote]

学习了.

就是说 可以str['i'],但不能随便用str.i.因为str的没有属性i,但它可以调用i引用的内容.
浴火_凤凰 2009-11-12
  • 打赏
  • 举报
回复
再次感谢wcwtitxu的回答!!!十分感谢!!!

我想有没有我说的那种可能?
浴火_凤凰 2009-11-12
  • 打赏
  • 举报
回复
<script>
var a={aa:111,bb:"ssssss",cc:true};
for(var i in a){
alert(i);//这里i的值分别为aa.bb,cc
alert(a.i);//难道这里a.i被替换成了a."aa"、a."bb"、a."cc",也自动添加了引号?
我想的这个过程到底发生没有,谁知道啊?还有怎样把a."aa"转换成a.aa?
alert(a[i]);//感觉这里a[i]好像被替换成了a["aa"]、a["bb"]、a["cc"],自动添加了引号
}
</script>
Click_Me 2009-11-11
  • 打赏
  • 举报
回复

对象成员存取符 有两种.和[] 两者的区别就是前者.右边运算元必须是标识符 而后者[]
里可以是变量 直接量 或表达式

for(var i in a) 这个a是定义的变量 所以就用a[i]
huing 2009-11-11
  • 打赏
  • 举报
回复
看错,你没有定义i属性。。。
huing 2009-11-11
  • 打赏
  • 举报
回复
i被重复定义了

<script>
var a={aa:111,bb:"ssssss",cc:true};
for(var s in a){
alert(a[s]);
alert(a.s);
}
</script>
zhouxiaobo123 2009-11-11
  • 打赏
  • 举报
回复

var a={aa:111,bb:"ssssss",cc:true};
for(var i in a){
alert(a[i]);
alert(i);//这里为什么是undefined?
}


这样才对
wcwtitxu 2009-11-11
  • 打赏
  • 举报
回复

var a={aa:111,bb:"ssssss",cc:true, i:"xxxx"};
for(var i in a){
alert(a[i]);
alert(a.i);这里为什么是undefined?
}

这很奇怪么? 你给a加个属性 i 不就每次都有值了.

a 本来就没定义 名为 i 的属性.
alert(a.i) 怎么会不是 undefined

87,921

社区成员

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

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