这样的东西有效,但看起来有点笨拙:
for (i in {foo: 1, bar: 1, wah: 1}) { // loops through foo, bar, wah
console.log(i + " haha"); // can view using Firebug or Chrome
}
如果使用数组,我不想为数组创建任何全局临时变量...此外,这必须适用于任何现代浏览器IE7 / FF / Chrome / Safari。感谢。
答案 0 :(得分:3)
您需要为某些浏览器声明i
。
我会使用for循环的初始化部分来声明变量。
阵列:
for (var i = 0, arr = ['foo', 'bar', 'wah']; i < arr.length; i++) {
console.log(arr[i] + " haha");
}
答案 1 :(得分:2)
如果要求您不想在全局(或当前)范围内创建变量,只想使用数组文字,那么use forEach
,尽管您需要对其进行原型设计进入不支持它的浏览器。
["foo", "bar", "wah"].forEach(function( v, i, arr ){
console.log(i + ' ' + v + " haha");
});
这是forEach
的{{3}}原型为Array。
if (!Array.prototype.forEach)
{
Array.prototype.forEach = function(fun /*, thisp */)
{
"use strict";
if (this === void 0 || this === null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (typeof fun !== "function")
throw new TypeError();
var thisp = arguments[1];
for (var i = 0; i < len; i++)
{
if (i in t)
fun.call(thisp, t[i], i, t);
}
};
}
答案 2 :(得分:1)
好的我发布这个原因我喜欢奇怪的代码,所以对我很轻松......
如果你绝对不想创建一个临时变量,全局或本地,并且不能使用或添加forEach
函数(如patrick dw的答案),你可以拖出可怕的with
声明要做的工作。它不是很漂亮......
with(['foo', 'bar', 'wah'])
while(valueOf().length)
console.log(valueOf().shift())
看看马,没有变数!
如果您对使用词法范围的变量没问题,那么您可以做一些更清洁的事情......
with({a: ['foo', 'bar', 'wah']})
while(a.length)
console.log(a.shift())
您可以使用自动执行的匿名函数执行相同的操作,但语法可怕且(可能)性能较差。
无论如何,如果可以的话,我强烈建议你使用forEach
,或者只是......你知道,局部变量。
答案 3 :(得分:0)
我认为这会更好看:
function show(arr){
for(el in arr){
console.log(arr[el])
}
}
show({foo: 1, bar: 1, wah: 1});
答案 4 :(得分:0)
为什么不使用var
关键字来表示局部变量(因为没有var
关键字声明的变量会自动为全局变量。)
此外,{ ... }
表示JavaScript对象,而不是数组。您可以使用[ ... ]
定义数组:
var myArray = ["one", "two", "three"];
for (var i in myArray) {
console.log(myArray[i] + " haha");
}
希望有所帮助!
答案 5 :(得分:0)
使用for时要小心,因为您可能会获得原型链中的键而不是对象的实际部分。所以在你的例子中你想要使用:
var obj = {foo: 1, bar: 1, baz: 1};
for(var key in obj) {
if(obj.hasOwnProperty(key)) {
console.log(key, obj[key]); //key, value
}
}
答案 6 :(得分:0)
怎么样
javascript:
Array.prototype.enum = function (fn) {
for( var i=0; i < this.length; i++ )
fn( this[i] )
};
["one","two","tri"].enum( function(item){
alert(item)
})
重新格式化