Почему индекс в массиве является строкой?
Почему в первом варианте тип переменной i строка, это же вроде индекс итеррации?
Нужен индекс в виде числа чтобы его умножать, но хотелось бы без лишних преобразовываний типов, так как массивы огромные.
Какой вариант лучше использовать, первый или второй, в чем преимущество обеих?
let obj = {
1234: {},
2489: {},
}
let nums = Object.keys(obj).map(key => parseInt(key));
console.log(nums);
for (let i in nums) {
console.log(typeof i, typeof nums[i]);
}
for (let i = 0; i < nums.length; i++) {
console.log(typeof i, typeof nums[i]);
}
Ответы (1 шт):
В первом варианте тип переменной строка, потому-что for...in используется для перебора свойств объектов. Когда вы перебираете массив этим циклом, то перебираются ключи массива как объект.
Ключи у объектов строковые, отсюда и строковый тип у переменной i.
Массив в JavaScript это тоже объект, у которого есть свои методы и свой конструктор.
Во втором вашем варианте используется цикл, где вы сами инициируете переменную числом 0 и при каждой итерации увеличиваете его на 1 (инкриминируете). Поэтому там по логике не может быть строки, ведь вы увеличиваете не строку, а число.
Попробуйте вариант перебора
for (const num of nums) {
console.log(num);
}