每个对象?

可能重复:
迭代对象字面值

我有JavaScript的对象:

var object = someobject; Object { aaa=true, bbb=true, ccc=true } 

我怎样才能使用这个?

  object.each(function(index, value)) { console.log(value); } 

不工作。

JavaScript对象没有标准的.eachfunction。 jQuery提供了一个函数。 见http://api.jquery.com/jQuery.each/下面应该工作;

 $.each(object, function(index, value) { console.log(value); }); 

另一个select是使用像这样的Object.keys().map()函数来使用vanilla Javascript

 Object.keys(object).map(function(objectKey, index) { var value = object[objectKey]; console.log(value); }); 

请参阅https://developer.mozilla.org/nl/docs/Web/JavaScript/Reference/Global_Objects/Object/keys和https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects /arrays/地图

这些通常比使用vanilla Javascript for-loop更好,除非你真的理解使用正常的for循环的含义,并且看到它的特定特性(比如在属性链上循环)的使用。

但通常,for循环不会比jQueryObject.keys().map()更好。 我将在下面使用一个简单的for循环来解决两个潜在的问题。


对,在其他答案中也指出了一个简单的Javascript替代scheme

 for(var index in object) { var attr = object[index]; } 

这有两个潜在的问题:

1。 你想检查你发现的属性是来自对象本身而不是来自原型链。 这可以像hasOwnProperty函数一样检查

 for(var index in object) { if (object.hasOwnProperty(index)) { var attr = object[index]; } } 

有关更多信息,请参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

jQuery.eachObject.keys函数自动处理。

2。 一个简单的for循环的另一个潜在的问题是范围和非闭包。 这有点复杂,但以下面的代码为例。 我们有一堆带有button0,button1,button2等button,我们要设置一个onclick他们做一个console.log像这样:

 <button id='button0'>click</button> <button id='button1'>click</button> <button id='button2'>click</button> var messagesByButtonId = {"button0" : "clicked first!", "button1" : "clicked middle!", "button2" : "clicked last!"]; for(var buttonId in messagesByButtonId ) { if (messagesByButtonId.hasOwnProperty(buttonId)) { $('#'+buttonId).click(function() { var message = messagesByButtonId[buttonId]; console.log(message); }); } } 

如果过了一段时间,我们点击任何一个button,我们将永远得到“最后点击! 在控制台中,永远不要“先点击”! 或“点击中间!”。 为什么? 因为在执行onclick函数的时候,这个时候会使用buttonIdvariables显示messagesByButtonId[buttonId] 。 而且由于循环已经完成,那么buttonIdvariables仍然是“button2”(它在最后一次循环迭代期间的值),所以messagesByButtonId[buttonId]将是messagesByButtonId["button2"] ,即“最后点击!”。

有closures包的更多信息,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures 。 特别是该页面的最后一部分,涵盖我们的例子。

再次, jQuery.eachObject.keys().map()为我们自动解决这个问题,因为它提供了一个function(index, value) (有闭包),所以我们可以安全的使用index和value放心,他们有我们所期望的价值。

 for(var key in object) { console.log(object[key]); } 
 var object = { "a": 1, "b": 2}; $.each(object, function(key, value){ console.log(key + ": " + object[key]); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>