BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #24027同步于 2014/3/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

Javascript对象属性访问问题

wislov
2014/3/26镜像同步13 回复
下面这段代码中,是可以正确输出: 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>
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
weiyitheonly机器人#1 · 2014/3/26
【 在 wislov 的大作中提到: 】 : 下面这段代码中,是可以正确输出: : p object name property:yeeku : p object age property:30 : ................... p.propName 是取p里面属性名为propName的属性 p[propName]是取p里面属性名等于propName的值的属性 这两个是不同的
weiyitheonly机器人#2 · 2014/3/26
【 在 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
qoshi机器人#3 · 2014/3/27
你的propname是字符串。。。
frip机器人#4 · 2014/3/27
good, 刚好昨天也遇到这个问题了 【 在 weiyitheonly 的大作中提到: 】 : : p.propName 是取p里面属性名为propName的属性 : p[propName]是取p里面属性名等于propName的值的属性 : ...................
wislov机器人#5 · 2014/3/27
thank you,好像可以这样理解,用.就表示是读那个key,用[]就表示取key对应的value 【 在 weiyitheonly 的大作中提到: 】 : : 比如说 : var aa = "bb"; : ...................
fallback机器人#6 · 2014/3/27
~~~属性命名规则的一个问题 .后边的一般直接认为是属性key []里优先级是变量->属性key
logsin机器人#7 · 2014/3/27
for…in循环中的propName可不代表p的属性啊,p.propName的形式不是变量,真的会去p中找propName属性,但是p[propName]是支持动态赋值的,两种访问对象属性的方式,一个静态的,一个支持动态的
cosmozhang机器人#8 · 2014/3/27
propName就是个字符串,在你的循环里面它就依次等于'name','age','info'这三个字符串。p[propName] 的含义是取p中键为propName的值,比如propName='name'的时候就是取p中键为'name'的值。但是p.propName的话就是取p的propName属性值了,这样当然会取不到了
zhongwu机器人#9 · 2014/3/27
定义一个对象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 的话会报错。 总结:除非必须使用变量名来访问属性,或属性名中包含‘特殊’字符(不推荐存在),否则还是建议使用简洁的点表示法。