相同点:它们的第一个运算数都是对象或者数组。
区别:"."将第二个运算数作为对象的属性读写。第二个运算数只能是合法的标识符
"[]"将第二个运算数作为数组的下标来读写。第二个运算数可以是任何类型的值甚至是undefined,但不能是未定义的标识符。
例如:
- var a=new Object();
- a.x=1;
- alert(a["x"]); //a.x与a["x"]是两种等价的形式
- var b=[];
- b["x"]=1;
- b.y=2;
- alert(b.x); //b["x"]与b.x是两种等价的形式
- alert(b["y"]); //b.y与b["y"]是两种等价的形式
与关系运算符不同,当[]的第二个运算数为对象时,总是先调用它的toString()方法来进行转换,如果转换失败,再调用valueOf方法来转换。
另外布尔值true和false总是被转换成字符串值"true"和"false",而不是1和0
例如:
- var c=[];
- c[true]="djak";
- alert(c["true"]); //c[true]与c["true"]等价