var map=new Object();
map.a="s";
var b="q";
map[b]="ss"
alert(map[b]);
alert(map.q);
似乎直接写map.a,浏览器会把a当成一个string来看待,是合法的;而要直接写map[b],就不行,浏览器会提示说b未定义,似乎浏览器把b当成了一个变量,必须先定义才能使用。我就是不明白这两种写法有什么区别,本质都是给这个m对象赋属性,请教各位大虾

解决方案 »

  1.   

    map是个对象,map.a表示对象中的属性
      

  2.   

    map[b] = map.ss = undefined
    map.a  = s
      

  3.   

    在 Jscript 中,对象和数组几乎是以相同的方式处理的。对象和数组均可以被赋予任意值,实际上数组只是一种特殊的对象。数组和对象的区别在于数组有一个“奇妙的” length 属性,而对象没有。这意味着可以给数组的一个元素赋予比其他元素更大的值。例如,myArray[100] = "hello",然后 length 属性将自动地被更新为 101(新长度)。同样,如果修改数组的 length 属性,将删除不再是数组部分的元素。而你所说的就是两种不同方式访问属性而已。
    详情参见Js手册关于【JScript 对象】的相关描述。注:Js和Jscript有一定区别,请勿混淆。
      

  4.   


    []中的a表示是个变量,如果a = "name",那么map[a] == map['name'] == map.name
    在JS中所有的对象都是关联数组,它的属性都字符串可以以的形式出现在方括号中以引用该属性的值。
      

  5.   

    昨天在看jsp的EL的时候,知道了为什么,即map.name中的name是一个静态的字符串,而当你写map[name]时,浏览器会认为name是一个变量,它会去找name所对应的值,即在这种写法中,name是一个动态的值。这一点和EL中对Map类型的引用是一模一样的。