疑问,解释一下这个代码

[code="js"]
var obj = {name:'john'};
obj[name]='tom';
alert(obj.name);
alert(obj[tom]);
[/code]
obj.name 是访问这个obj的name属性,
obj[name]表示什么呢?
obj是对象还是数组啊?

6个回答

问题的关键在于这一行代码写错了。
[code="javascript"]obj[name]='tom'; [/code]

应该写成

[code="javascript"]obj['name']='tom'; [/code]
下面获取的代码同理

对象无论是按索引还是按key都能访问到属性,但是name不加引号的话,程序会把name所代表的含义作为索引,也就是undefind。其实你obj里有两个key,一个是name,一个空的,所以存了两个value

iteye_5373
iteye_5373 谢谢,太感谢了
接近 8 年之前 回复

属性的两种访问方式,[]是通过索引访问。

iteye_5373
iteye_5373 根据你的描述,json.key和json[key]应该取得是同一属性值,但是这两个alert分别打印“john”和“tom”,这是为什么啊?
接近 8 年之前 回复

{key:value,...}为json对象,json.key和json[key]为json对象访问内部属性值的方式;

iteye_5373
iteye_5373 根据你的描述,json.key和json[key]应该取得是同一属性值,但是这两个alert分别打印“john”和“tom”,这是为什么啊?
接近 8 年之前 回复

应该是:
alert(obj['name']);

这样写name是个变量:
obj[name]='tom';
alert(obj[name]);

javascript对象的属性有两种访问方式:
一、obj.proptname直接访问;这个和一般的语言语法相似
二、obj.['proptname']与数组访问下标方式类似;这种用于动态访问对象属性

第二种方式可以用于遍历对象的所有属性,如下段代码

[code="javascript"]
var o = {a:1,b:2};
for(var p in o)
alert('o.'+p+'='+o[p]);
[/code]

输出结果为:
o.a=1
o.b=2

javascrpt的数组有两种,
1.我们常见常用的常规数组。
2.关联数组。
我介绍一下啥是关联数组,其实就是一个包含属性的对象,比如
function person(name,age){
this.name=name;
this.age=age
}
对于这么一个对象,如果们new一个出来 var obj = new person('张三',23);
这个时候obj是一个对象,我们也可以说他是一个关联数组,因为如果你要访问obj的name属性除了obj.name以外也可以这样obj["name"]
这并不矛盾,因为数组也是对象嘛,但是关联数组的长度永远都是1,
alert(obj.length);// 答案为1.

iteye_5373
iteye_5373 恩,你的是对的,我明白我错误的地方了,应该写成obj["name"] ,我写的obj[name]
接近 8 年之前 回复
luoyu_ds
luoyu_ds 不可能的,我一直这么用按照我上面给的例子你试试 alert(obj.name) alert(obj["name"]); 结果肯定是一样的
接近 8 年之前 回复
iteye_5373
iteye_5373 按照你的解释两种方式访问的是同一个属性,但是为什么alert的时候显示的值不一样呢?
接近 8 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐