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

解决方案 »

  1.   


    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 
      

  2.   


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

  3.   

    i被重复定义了<script>
    var a={aa:111,bb:"ssssss",cc:true};
    for(var s in a){
    alert(a[s]);
    alert(a.s);
    }
    </script>
      

  4.   


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

    for(var i in a) 这个a是定义的变量 所以就用a[i]
      

  5.   

    谢谢了,我知道a[i]可以,但是请问:
    a.i这里的i难道不是标示符吗?
    标示符的定义不就是可以使用字母、数字、下划线和$符号吗?
      

  6.   


    i是有值的,可以测试下面代码<script>
    var a={aa:111,bb:"ssssss",cc:true};
    for(var i in a){
    alert(i);
    alert(a.i);
    alert(a[i]);
    }</script>
      

  7.   

    在这里a.i实际上等于a['i'],所以当然是undefined了
      

  8.   

    在循环体内,i是个变量,字符i是标识符,但是i的值不是标识符。
    a.i是获取对象a的i属性,相当于a["i"],对象a没有定义i这个属性,所以是undefined
      

  9.   

    // 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);// 仔细对比一下这四行, 应该能想到为什么了
      

  10.   

    // 再强调一下:  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,
    ...*/
      

  11.   

    按理说可以。不过认真看看好像 有问题。你alert[i]看看
      

  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>
      

  13.   

    再次感谢wcwtitxu的回答!!!十分感谢!!!我想有没有我说的那种可能?
      

  14.   


    学习了.就是说 可以str['i'],但不能随便用str.i.因为str的没有属性i,但它可以调用i引用的内容.