相同点:它们的第一个运算数都是对象或者数组。

区别:"."将第二个运算数作为对象的属性读写。第二个运算数只能是合法的标识符

"[]"将第二个运算数作为数组的下标来读写。第二个运算数可以是任何类型的值甚至是undefined,但不能是未定义的标识符。

 

例如:

 
  
  1. var a=new Object();  
  2. a.x=1;  
  3. alert(a["x"]);    //a.x与a["x"]是两种等价的形式  
  4.  
  5. var b=[];  
  6. b["x"]=1;  
  7. b.y=2;  
  8. alert(b.x);      //b["x"]与b.x是两种等价的形式
  9. alert(b["y"]); //b.y与b["y"]是两种等价的形式 

 与关系运算符不同,当[]的第二个运算数为对象时,总是先调用它的toString()方法来进行转换,如果转换失败,再调用valueOf方法来转换。

另外布尔值true和false总是被转换成字符串值"true"和"false",而不是1和0

例如:

 

 
  
  1. var c=[];  
  2. c[true]="djak";  
  3. alert(c["true"]);  //c[true]与c["true"]等价