javascript代码示例:
function a() {
this.array1 = [];
this.addToArray = function(name) {
this.array1.push(new b(name));
return true;
}
this.searchForName = function(name) {
for(var i in this.array1) {
alert(i.name);
}
}
function b(name) {
this.name = name;
}
}
我将这个javascript文件包含在html文档中。在html文档的内部脚本标记中,我有以下代码:
var myObject = new a();
myObject.addToArray("test1");
myObject.searchForName("test1");
运行此代码,我希望弹出一个警告"test1"
,但它会弹出为未定义。但是,Chrome中的调试器显示myObject内部有一个数组,其中项目0的名称为"test1"
。当我使用断点来测试代码时,它表明在调用警报时, i.name未定义。这有什么问题?
答案 0 :(得分:2)
您正在寻找name
号码上的i
媒体资源,而不是i
的{{1}}成员资格。
所以:
this.array
应该是:
i.name
结果是:
this.array1[i].name
工作示例: http://jsfiddle.net/seNxD/
另外,如果您只对数字索引感兴趣,那么使用this.searchForName = function(name) {
for(var i in this.array1) {
// get it from this array1
alert(this.array1[i].name);
}
}
语句并不是一个好主意。由于您没有枚举,因此使用for-in
语句。
答案 1 :(得分:2)
永远不要使用for...in
(MDC documentation describes why)循环数组。使用普通for
循环:
for(var i = this.array1.length;i--;) {
alert(this.array1[i].name);
}
无论如何, for...in
遍历对象的键,这将是数组的索引。因此,for...in
循环的循环体必须与上面显示的for
循环完全相同。
例如,如果你有这个,你会使用for...in
:
var obj = {foo: 'bar', answer: '42'};
for(var key in obj) {
alert(key + " is " + obj[key]);
}
进一步说明:通常以大写字母开始构造函数的名称。