日期:2014-05-16  浏览次数:20350 次

对象的属性引用采用obj.xxx与obj[xxx]有什么区别?
谢谢。

------解决方案--------------------
在JavaScript的学习过程中,我已经习惯了使用类似str.length,str.split(",")这样的点语法来引用对象的属性和方法,实际上引用一个属性(方法)有以下两种方法:
1 对象名.属性(方法)名
2 对象名["属性(方法)名"]
所以str.length等价于str["length"];str.split(",")等价于str["split"](","),大部分情况下,两者使用起来没有区别,但在某些特殊情况下,选择哪一种可以带给我们很大的方便性。例如:看下面的例子 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312" />
<title>使用方括号[]引用对象的属性和方法</title>
<script language="JavaScript" type="text/javascript">
function getIt(obj){
if(obj.selectedIndex != 0){
alert(student[obj.value]);//方括号语法
alert(eval("student." + obj.value));//点语法
}
}
var student = new Object();
student.name = "阿会楠";
student.age = 22;
</script>
</head>
<body>
<select onchange="getIt(this)">
<option>请选择</option>
<option value="name">名字</option>
<option value="age">年龄</option>
</select>
</body>
</html>


用方括号语法:student[obj.value]而用点语法:eval("student." + obj.value)
显然这个例子中使用方括号比使用点语法来得方便,这个例子说明点语法并不适用于用字符串表示的属性和方法。
另一个使用方括号的优点是,可以使用数字打头或者出现空格作为属性名。例如我们可以使用:student["my name"]这样的语句,而点语句是做不到这点的。
------解决方案--------------------
javascript对象就是关联数组
对象属性访问法
obj.xxx
关联数组访问法
obj[xxx]
------解决方案--------------------
不过obj[xxx]这个有好处..就是xxx是动态的时候..

例如:
var xxx="2";

obj[xxx]这样就可以..但obj.xxx就不行的..
------解决方案--------------------

有一点点区别

obj.xxx // xxx只能是合法的标识符
obj["xxx"] // xxx可以是任意字符

obj.123 // error
obj["123"] // 可以访问

obj.. // error
obj["."] // 可以访问