返回信息流下面这段代码中,是可以正确输出:
p object name property:yeeku
p object age property:30
p object info property:function () { alert('info method!'); }
但如果把for循环中的p.[propName]改为p.propName,就无法输出正确的值,而是只能输出:
p object name property:undefined
p object age property:undefined
p object info property:undefined
请问这是为什么啊?书上的解释有点看不懂
<script type="text/javascript">
function Person(name , age)
{
this.name = name;
this.age = age;
this.info = function()
{
alert('info method!');
}
}
var p = new Person('yeeku' , 30);
for (propName in p)
{
document.writeln('p object ' + propName
+ " property:" + p[propName] + "<br />");
}
</script>
这是一条镜像帖。来源:北邮人论坛 / www-technology / #24027同步于 2014/3/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖
Javascript对象属性访问问题
wislov
2014/3/26镜像同步13 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 wislov 的大作中提到: 】
: 下面这段代码中,是可以正确输出:
: p object name property:yeeku
: p object age property:30
: ...................
p.propName 是取p里面属性名为propName的属性
p[propName]是取p里面属性名等于propName的值的属性
这两个是不同的
【 在 wislov 的大作中提到: 】
: 下面这段代码中,是可以正确输出:
: p object name property:yeeku
: p object age property:30
: ...................
比如说
var aa = "bb";
var o = {aa:123, bb:456};
o.aa = 123
o[aa] = o["bb"] = o.bb = 456
good, 刚好昨天也遇到这个问题了
【 在 weiyitheonly 的大作中提到: 】
:
: p.propName 是取p里面属性名为propName的属性
: p[propName]是取p里面属性名等于propName的值的属性
: ...................
thank you,好像可以这样理解,用.就表示是读那个key,用[]就表示取key对应的value
【 在 weiyitheonly 的大作中提到: 】
:
: 比如说
: var aa = "bb";
: ...................
for…in循环中的propName可不代表p的属性啊,p.propName的形式不是变量,真的会去p中找propName属性,但是p[propName]是支持动态赋值的,两种访问对象属性的方式,一个静态的,一个支持动态的
propName就是个字符串,在你的循环里面它就依次等于'name','age','info'这三个字符串。p[propName] 的含义是取p中键为propName的值,比如propName='name'的时候就是取p中键为'name'的值。但是p.propName的话就是取p的propName属性值了,这样当然会取不到了
定义一个对象var person = {name:"tfirer",age:18};主要有两种方法访问person的属性:person["name"]和person.name;既点表示法和方括号表示法,它们在功能上是没有区别的,但方括号表示法却有一些优点。
1:方括号表示法可以用变量名来访问属性 var theName = "name"; person[theName];//和person["name"]等价。
2:如果属性名字包含有会导致语法错误的字符,或者属性名使用的是关键字或保留字,可以使用方括号表示法,eg: person["the name"] = "lover"; person["the name"]; //因为the name包含会导致语法错误的空格,如果使用 person.the name 的话会报错。
总结:除非必须使用变量名来访问属性,或属性名中包含‘特殊’字符(不推荐存在),否则还是建议使用简洁的点表示法。