每个对象?
我在JavaScript中有对象:
var object = someobject;
Object { aaa=true, bbb=true, ccc=true }
我如何使用每个?
object.each(function(index, value)) {
console.log(value);
}
不工作。
我在JavaScript中有对象:
var object = someobject;
Object { aaa=true, bbb=true, ccc=true }
我如何使用每个?
object.each(function(index, value)) {
console.log(value);
}
不工作。
JavaScript 对象没有标准的 .each 函数。jQuery提供了一个函数。请参阅 http://api.jquery.com/jQuery.each/ 以下内容应该有效
$.each(object, function(index, value) {
console.log(value);
});
另一种选择是使用 vanilla Javascript,使用 和 Array 函数,如下所示Object.keys()
.map()
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/Array/map
这些通常比使用普通的Javascript for-loop更好,除非你真正理解使用普通for-loop的含义,并看到它的特定特征(如循环属性链)的用途。
但通常,for 循环并不比 或 更好。我将在下面讨论使用普通 for 循环的两个潜在问题。jQuery
Object.keys().map()
是的,所以在其他答案中也指出,一个简单的Javascript替代方案将是
for(var index in object) {
var attr = object[index];
}
这有两个潜在的问题:
1 .您要检查要查找的属性是否来自对象本身,而不是来自原型链的上部。这可以通过这样的功能进行检查hasOwnProperty
for(var index in object) {
if (object.hasOwnProperty(index)) {
var attr = object[index];
}
}
和 函数会自动处理此事。jQuery.each
Object.keys
2 .普通 for 循环的另一个潜在问题是范围和非闭包。这有点复杂,但以下面的代码为例。我们有一堆带有ids button0,button1,button2等的按钮,我们想在它们上设置一个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);
});
}
}
如果一段时间后,我们单击任何按钮,我们将始终在控制台中获得“单击最后一个!”,并且永远不会“首先单击!”或“单击中间!”。为什么?因为在执行 onclick 函数时,它将使用该时刻的变量显示。由于循环在那一刻已经完成,变量仍然是“button2”(它在上一次循环迭代期间的值),因此将是,即“单击最后一个!”messagesByButtonId[buttonId]
buttonId
buttonId
messagesByButtonId[buttonId]
messagesByButtonId["button2"]
有关闭包的详细信息,请参阅 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures。特别是该页面的最后一部分,它涵盖了我们的示例。
同样,并自动为我们解决这个问题,因为它为我们提供了一个(具有闭包),因此我们可以安全地使用索引和值,并放心它们具有我们期望的值。jQuery.each
Object.keys().map()
function(index, value)
for(var key in object) {
console.log(object[key]);
}