var arrayOfNumbers = [1, 2, 3, 4, 5, 6, 78];
for(var index in arrayOfNumbers){
console.info(index+1);
}Результатом этого примера кода является
.
01
11
21
31
41
51
61
Почему эти индексы массива обрабатываются в JavaScript как строка?
ключи объектов всегда являются строками.
если вы хотите добавить индекс с 1, вы можете попробовать этот console.info (parseInt (index) +1); согласен с @NinaScholz
Классический объект имеет свойства {'foo': 'hello'}, массив ['hello'] в основном такой же, как {'0': 'hello'}. Массивы - это просто объекты, имена свойств которых являются индексами, но в конечном итоге они заканчиваются строкой.
Да, и for..in изначально предназначены для объекта, поэтому разумно возвращать строку, поскольку ключи объектов всегда являются строками.
@rohitwtbs Я опубликовал ответ, который может дать вам ожидаемый результат.
Индекс - это не строка, а index + 1. Переведите индекс в int, и все будет в порядке
Кстати, следует избегать использования цикла for...in с массивами. См. Этот Почта.
@DeepakKamat Не только изначально. Они все еще есть :-)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Note: for...in should not be used to iterate over an Array where the index order is important.
... The for...in loop statement will return all enumerable properties, including those with non–integer names and those that are inherited.
При использовании для ... в ключ всегда является строкой, и все, что он делает, - это конкатенация строк.
У вас есть массив, поэтому лучше использовать Array.foreach () так:
var arrayOfNumbers = [1, 2, 3, 4, 5, 6, 78];
arrayOfNumbers.forEach(function(item, index){
console.info(index + 1); // Here the index is a number!
});И это потому, что ключи объекта всегда являются строками, независимо от того, { 0: "some value" } это или '0': "value value..".
да, я проверил с typeof, и это строка. Мой запрос похож на другие языки, такие как JAVA, это будет целое число, но почему этот индекс является строкой в javascript?
@rohitwtbs, потому что при использовании for in он обрабатывает ваш массив как объект, а ключи объекта всегда являются строками.
@caramba понял.
Ключ - это строка, потому что это объект. В JavaScript есть Объект, поэтому его ключи в строке.
Вы можете добиться этого, преобразовав строку в int или добавив префикс +.
var arrayOfNumbers = [1, 2, 3, 4, 5, 6, 78];
for(var index in arrayOfNumbers) {
var v = parseInt(index) + 1;
console.info(v);
}
С префиксом
var arrayOfNumbers = [1, 2, 3, 4, 5, 6, 78];
for(var index in arrayOfNumbers) {
var v = parseInt(index) + 1;
console.info(v);
} var arrayOfNumbers = [1, 2, 3, 4, 5, 6, 78];
for(var index in arrayOfNumbers){
var v = +index + 1;
console.info(v);
}
Не используйте "for in" для массива. 'for in' предназначен для обхода объекта. Когда вы пробуете это с массивом, это выглядит так:
arr = {
"0": 1,
"1": 2,
"2": 3,
"3": 4,
"4": 5,
"5": 6,
"6": 78
}
Надеюсь, вы это ищете:
var arrayOfNumbers = [1, 2, 3, 4, 5, 6, 78];
for(var index=0; index<arrayOfNumbers.length; index++) {
console.info(index+1);
}
Ссылка: MDN FOR..IN
Оператор для ... в выполняет итерацию по перечислимым свойствам объекта. Для каждого отдельного свойства могут выполняться операторы.
var string1 = "";
var object1 = {a: 1, b: 2, c: 3};
for (var property1 in object1) {
string1 = string1 + object1[property1];
}
console.info(string1);В вашем случае индексы называются ключами объектов, которые представляют собой строку t или строку ключа: { foo : 'something in universe'}
Посмотрите здесь, если вам нужно значение ключа:
var arrayOfNumbers = [1, 2, 3, 4, 5, 6, 78];
for(var index in arrayOfNumbers) {
console.info(arrayOfNumbers[index+1]);
}
console.info(arrayOfNumbers)Как указано в комментариях и некоторых ответах, цикл для в предназначен для итераций объекта, а в массивах JavaScript также есть объекты. Таким образом, ключи будут строкового типа.
Однако для желаемого результата вы можете использовать что-то вроде этого:
var arrayOfNumbers = [1, 2, 3, 4, 5, 6, 78];
arrayOfNumbers.forEach(function(num)
{
console.info(num+1);
});
От для ... в (MDN):
The for...in statement iterates over the enumerable properties of an object.
Таким образом, значение index в вашем коде всегда будет возвращать имена этих свойств. В массиве это имена индексов.
Кроме того, String плюс Number равняется String, который напечатан в console.
Потому что это строка. Попробуйте
typeof index, он вернет тип"string"