每个对象?
可能重复:
迭代对象字面值
我有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); });
这些通常比使用vanilla Javascript for-loop更好,除非你真的理解使用正常的for循环的含义,并且看到它的特定特性(比如在属性链上循环)的使用。
但通常,for循环不会比jQuery
或Object.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.each
和Object.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函数的时候,这个时候会使用buttonId
variables显示messagesByButtonId[buttonId]
。 而且由于循环已经完成,那么buttonId
variables仍然是“button2”(它在最后一次循环迭代期间的值),所以messagesByButtonId[buttonId]
将是messagesByButtonId["button2"]
,即“最后点击!”。
有closures包的更多信息,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures 。 特别是该页面的最后一部分,涵盖我们的例子。
再次, jQuery.each
和Object.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>