IT干货网

for...in与点语法

shasha 2022年03月15日 编程设计 185 0

语法

for...in语句循环一个指定的变量来循环一个对象所有可枚举的属性。如下所示

for (variable in object){ 
statements 
} 

问题

在实际的使用过程中发现,在for in 循环遍历中,对于json对象,如果通过obj.key是无法访问值的,但是通过obj[key]可以访问值。
然而,我们知道,对于单独的obj的话,可以通过obj.key来访问。

Function.prototype.addMethod = function (obj) { 
	 
	for (key in obj){ 
		//注意,遍历时,obj.key = undefined是无法获取到对应json对象里面的函数 
		this.prototype[key] = obj[key]; 
		console.log(typeof key);//输出string 
		//console.log(obj.key);//输出undefined 
                //console.log(obj[key]);//能够得到传递进来的属性值 
	} 
	return this; 
} 
Methods = function(){}; 
 
Methods.addMethod({"aa":function(){alert(aa)},"bb":function(){alert(bb)}}); 
 

解答

原因:Object支持点语法Objec.attribute访问其属性,也支持Object["attribute"]的方式访问属性。但是在for...in循环中,key只是个存储位置,里面存储了object的属性值名称字符串。因此,无法通过点语法进行访问,强行访问的话,由于没有属性key,只能返回undefined。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!