这太简单了,我感到困惑。我有以下内容:
var x = 'shrimp';
var stypes = new Array('shrimp', 'crabs', 'oysters', 'fin_fish', 'crawfish', 'alligator');
for (t in stypes) {
if (stypes[t] != x) {
alert(stypes[t]);
}
}
一旦值迭代,它就会开始返回十几个函数,例如
function (iterator, context) {
var index = 0;
iterator = iterator.bind(context);
try {
this._each(function (value) {iterator(value, index++);});
} catch (e) {
if (e != $break) {
throw e;
}
}
return this;
}
到底他妈发生了什么?
编辑:在这些脚本中我使用http://script.aculo.us/prototype.js http://script.aculo.us/prototype.js and http://script.aculo.us/scriptaculous.js http://script.aculo.us/scriptaculous.js我记得现在读过关于原型扩展数组的方式,我敢打赌这是其中的一部分。我该如何处理?
The for
枚举即将结束every您传递给它的对象的成员。在本例中是一个数组,它恰好具有作为成员的函数以及传递的元素。
您可以重写 for 循环来检查是否typeof stypes[t] == "function"
或亚达亚达。但在我看来,你最好只修改循环到元素。
for(var i = 0, t; t = stypes[i]; ++i){
if (t != x) {
alert(t);
}
}
Or
for(var i = 0; i < stypes.length; ++i){
if (stypes[i] != x) {
alert(stypes[i]);
}
}
我想将我的最后一条评论迁移到答案中,以添加第一种循环类型的警告通知。
from Simon Willison 的《JavaScript 重新介绍》 https://developer.mozilla.org/En/A_re-introduction_to_JavaScript..
for (var i = 0, item; item = a[i]; i++) {
// Do something with item
}
这里我们设置两个变量。
中间部分的作业
for 循环也经过测试
诚实——如果成功,
循环继续。由于 i 增加
每次,数组中的项目都会
按顺序分配给项目
命令。当出现“falsy”时循环停止
找到项目(例如未定义)。
请注意,这个技巧应该只
用于您知道不存在的数组
包含“假”值(数组
例如对象或 DOM 节点)。如果
您正在迭代数字数据
可能包含 0 或字符串数据
可能包含空字符串
你应该使用 i, j 习惯用法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)