循环访问javascript对象时出现问题

时间:2018-08-20 07:16:57

标签: javascript loops object

for..in循环中,

为什么当以o.i访问时,属性的值返回undefinedo[i]返回正确的值?

参考代码段:

var object = {
   id:2,
   name:'axs',
   address:'colon street'
};

for(let property in object){
  console.log(object.property); // returns undefined
  console.log(object[property]); // returns property-value
}

5 个答案:

答案 0 :(得分:4)

o.i将在i中寻找属性Object,但是当您进行o[i]时,它将寻找评估的财产i,它可能是:{{ 1}},name等...

尽管使用id表示法获取属性时,不会对该变量求值,但认为您正在尝试获取属性dot本身。

答案 1 :(得分:1)

for..in循环中,property作为 string 分配给变量,即在循环内部,typeof(i)将始终返回"string"MDN explanation介绍for..in的工作方式。

使用点符号访问时,引擎将尝试读取为o."name",正确地将其读取为undefined。请注意,o.nameo."name"是两件事。

使用访问对象的属性

  • the dot notation-property必须是有效的JavaScript标识符,即property将被评估以返回所需的值。

  • the bracket notation-property总是 一个字符串。该字符串不必是有效的标识符,它可以具有任何值,例如“ 1foo”,“!bar!”,甚至“”(一个空格)。

PS

使用for..in访问对象属性时,请注意是否只考虑对象的属性,而不考虑对象的原型。在这种情况下,请使用getOwnPropertyNames()或执行hasOwnProperty()检查。 MDN explanation

答案 2 :(得分:0)

它们是访问对象属性的不同方法。 o.i等同于o ['i'],在您的情况下不存在,因此返回undefined。

答案 3 :(得分:0)

表达式object.property返回未定义,因为在property上找不到名为object的属性。

答案 4 :(得分:0)

因为点符号将property视为所使用对象的属性。要将for-in循环中的“属性”用作变量,您需要使用方括号访问器。

如果您为对象提供“属性”属性,则该属性会按预期工作:

var object = {
   id:2,
   name:'axs',
   address:'colon street',
   property:'residential'
};

for(let property in object){
  console.log(object.property); // returns 'residential'
  console.log(object[property]); // returns property-value
}