在循环中访问javascript对象时出现问题
在for..In循环中 为什么作为在循环中访问javascript对象时出现问题,javascript,loops,object,Javascript,Loops,Object,在for..In循环中 为什么作为o.i访问时属性的值返回undefined而o[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]); // retur
o.i
访问时属性的值返回undefined
而o[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
}
o.i
将在对象中查找属性i
,但当您执行o[i]
操作时,它将查找评估的属性i
,该属性可能是:名称
,id
,等等
使用dot
符号获取属性时,不会对变量求值,会认为您正在尝试获取属性i
本身 o.i
将在对象中查找属性i
,但当您执行o[i]
时,它将查找评估属性i
,该属性可能是:名称
,id
,等等
使用dot
符号获取属性时,不会对变量求值,会认为您正在尝试获取属性i
本身 它们是访问对象属性的不同方式。o、 i相当于o['i'],在您的情况下,它不存在,因此返回undefined。它们是访问对象属性的不同方式。o、 i相当于o['i',在您的情况下,它不存在,因此返回undefined。在for..in
循环中,属性
作为字符串分配给变量,即在循环中,typeof(i)
将始终返回“string”
。关于
中..的工作原理
当使用点表示法访问时,引擎尝试读取为o.“name”
,它正确地将其查找为未定义。请注意,o.name
和o.“name”
是两个不同的东西
使用访问对象的属性
- -
属性
必须是有效的JavaScript标识符,即属性
将被计算以返回所需的值
- -
属性
始终是字符串。字符串不必是有效标识符,它可以有任何值,例如“1foo”、“!bar!”,甚至是“”(空格)
PS
当在中使用<代码>访问对象属性时,请注意,如果您只考虑附加到对象的属性,而不考虑它的原型。在这种情况下,请使用
getOwnPropertyNames()
或执行hasOwnProperty()
检查 在for..In
循环中,属性
作为字符串分配给变量,即在循环中,typeof(i)
将始终返回“string”
。关于
中..的工作原理
当使用点表示法访问时,引擎尝试读取为o.“name”
,它正确地将其查找为未定义。请注意,o.name
和o.“name”
是两个不同的东西
使用访问对象的属性
- -
属性
必须是有效的JavaScript标识符,即属性
将被计算以返回所需的值
- -
属性
始终是字符串。字符串不必是有效标识符,它可以有任何值,例如“1foo”、“!bar!”,甚至是“”(空格)
PS
当在中使用<代码>访问对象属性时,请注意,如果您只考虑附加到对象的属性,而不考虑它的原型。在这种情况下,请使用
getOwnPropertyNames()
或执行hasOwnProperty()
检查 表达式object.property
返回未定义的属性,因为在object
上找不到名为property
的属性,因为在对象
上找不到名为属性
的属性,因为点符号将属性
视为所用对象的属性。要将for in
循环中的“property”用作变量,需要使用方括号访问器
如果为对象指定“属性”属性,则该属性将按预期工作:
var对象={
id:2,
名称:'axs',
地址:科隆街,
物业:'住宅'
};
for(对象中的let属性){
console.log(object.property);//返回'residential'
console.log(object[property]);//返回属性值
}
因为点符号将属性
视为所用对象的属性。要将for in
循环中的“property”用作变量,需要使用方括号访问器
如果为对象指定“属性”属性,则该属性将按预期工作:
var对象={
id:2,
名称:'axs',
地址:科隆街,
物业:'住宅'
};
for(对象中的let属性){
console.log(object.property);//返回'residential'
console.log(object[property]);//返回属性值
}
您到底想做什么?你能详细说明一下吗?你到底想做什么?你能详细说明一下吗?