#javascript #arrays
#javascript #массивы
Вопрос:
У меня есть объект, и я пытаюсь увидеть, что внутри него. Итак, я использовал print(object)
, который, возможно, должен содержать Spot: True
, указывающий, что cat Spot является живым. Он вернулся [object object]
. Итак, я попробовал, show(object)
, и у меня получилось Spot: True
. Я думаю, что это правильно, но я не уверен, на что похожи индексы. Например, я не уверен, являются ли ключи ассоциативными или числовыми, или даже разрешены ли ассоциативные массивы в JavaScipt.
Причина, по которой я задаюсь вопросом, почему, потому for (var cats in object){show(cats);}
что возвращает Spot
. Я не могу найти способ найти строку ‘cat’ как часть массива.
Комментарии:
1.
cats
является переменной, какx
и в:var x = 42;
. Кстати,show
это не встроенная функция JavaScript.2. Феликс, вот почему я хотел бы, чтобы они включили код, который заставляет show работать…. Я знаю, что cats — это переменная. Это очевидно. Что не очевидно, так это то, почему программа перечисляет все «cats» в объекте, когда в объекте нет ничего «cats».
Ответ №1:
cats
В вашем примере это новая переменная, которая содержит каждый объект итерации.
И да, «ассоциативные массивы» разрешены, но на самом деле это просто объекты:
var foo = {
bar: "baz"
}
alert(foo.bar);
alert(foo["bar"]);
Re: for/in
утверждение: оно более или менее совпадает со следующим, здесь используется массив:
var cats;
var arr = [42, 69];
for (var i = 0; i < arr.length; i ) {
cats = arr[i];
alert(cats);
}
Или вы можете использовать for/in
, и это становится:
for (cats in arr) {
alert(arr[cats]);
}
Это немного отличается для массивов, но в массиве также нет «кошек».
Комментарии:
1. Дэйв, похоже, ты ближе всего к ответу, который я могу понять. Не могли бы вы посмотреть ветку ответа на вопрос?
2. @Wolfpack’08 Имена переменных произвольны; возможно, «Spot» — это имя кошки автора? Я не могу сказать, почему было выбрано это имя, но это не имеет никакого отношения к содержимому массива с технической точки зрения. С когнитивной точки зрения это должно, чтобы упростить чтение и понимание кода.
3. Дэйв, я понимаю, почему Spot находится в объекте. Есть строка кода :
var livingCats = {Spot: "True"};
. Я не понимаю, почемуvar cats
перечисляет массив, потому что он не существует как ключ или значение в объекте.4. @Wolfpack’08 … Именно так работает JavaScript. Когда вы говорите
for (anyVariable in anObject)
, значениеanyVariable
устанавливается для каждого свойства этого объекта, поскольку свойства объекта повторяются. Переменнаяcats
не «перечисляет массив»,for
оператор перечисляет массив и устанавливает значениеcats
для каждой записи массива во время перечисления. Я отредактирую ответ, чтобы посмотреть, смогу ли я сделать его более понятным, но больше ничего нельзя сказать.5. @Wolfpack’08 (И если ответ отвечает на ваш вопрос, он должен быть принят.)
Ответ №2:
В Javascript есть массивы и объекты. Массивы имеют числовые непрерывные индексы [0..length)
и упорядочены, в то время как объекты могут иметь случайные индексы (строки, числа) и не обязательно упорядочены (зависит от реализации).
Использование for(var key in obj) {}
должно использоваться только для объектов и выполнять итерации по свойствам, которые имеет объект. Вы можете использовать obj[var]
для доступа к значению каждого свойства. Обратите внимание, что полезно добавить if(!obj.hasOwnProperty(key)) continue;
проверку в цикл, чтобы убедиться, что вы не попали в свойства, введенные в прототипе объекта.
Комментарии:
1. Я думаю, что в моем случае show(object); дает мне формат возврата
{index: value}
. Хотелось бы, чтобы автор книги показал нам, как работает исходный код для показа. Я думаю, просто набрав «объект», вы получите пару индекс-значение в консоли.
Ответ №3:
Если object
это ваш объект, я предполагаю, что на самом деле это не массив. Также for (var x in object)
может быть перечисление элементов (свойств, функций и т. Д.) Вашего объекта.
Откуда вы object
пришли? Что такое show()
и print()
?
Если бы я пытался распечатать свойства объекта, у меня могло бы быть что-то вроде этого:
var myObject = {
property1: 'Test',
property2: 'Test2',
function1: function() {
// do something
}
};
for (var prop in myObject) {
if (myObject.hasOwnProperty(prop)) {
console.log(prop ' = ' myObject[prop]);
}
}
Это должно привести к следующему:
property1 = Test
property2 = Test2
function1 = function() { // do something }
Вот jsFiddle, чтобы показать пример.
С учетом сказанного, JavaScript на самом деле не имеет ассоциативных массивов. Что у вас может быть, так это объект с парами свойство: значение, что, я думаю, у вас есть.